Avatar billede m_els Nybegynder
15. december 2005 - 17:21 Der er 12 kommentarer og
1 løsning

Forklaring af eksempel

Hej alle.

Jeg har brug for at kunne oprette enum's dynamisk.
Jeg har søgt på google og har fundet dette eksempel http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemreflectionemitenumbuilderclasstopic.asp

Men jeg kan bare ikke rigtigt gennemskue eksemplet. Er det nogle der kan hjælpe?
Avatar billede sovsekoder Nybegynder
16. december 2005 - 17:28 #1
hvad er dit konkrete problem ? overordnet viser eksemplet hvordan du opretter en enum og gemmer dit assembly via:

AssemblyBuilder
ModuleBuilder
EnumBuilder
Avatar billede sovsekoder Nybegynder
16. december 2005 - 17:28 #2
men det havde du nok regnet ud ;) - så der må være et eller andet specifikt du syns' er mystisk ?!
Avatar billede sovsekoder Nybegynder
16. december 2005 - 17:29 #3
er problemet i CreateCallee, eller i main kunne man måske spørge?
Avatar billede m_els Nybegynder
16. december 2005 - 21:32 #4
Mit problem er at jeg ikke kan gennemskue, hvordan jeg opretter og benytter enums dynamisk
Avatar billede sovsekoder Nybegynder
17. december 2005 - 21:58 #5
ok 2 ting, oprettelse og brug:

Ang. oprettelse:
I eksemplet vises der hvordan man opretter en enum, vha. myEnumBuilder.

Ang. brug:
Der vises dog ikke hvordan man "bruger den". Måske er det der problemet ligger. Du vil ikke kunne "bruge" din enum på sædvanlig vis, vha. den sædvanlige syntax, i stil med:

MyEnum e = MyEnum.Monday;
if(e == MyEnum.Monday)
  Console.WriteLine("Its monday");

Da compileren ikke kender din enum compile-time. Du skal altså finde din enum og dens elementer programatisk.

Spørgsmålet er om du vinder noget ved at oprette din enum dynamisk, hvis det eneste formål er at du skal teste på værdien af en "enum", ell. lign. Jeg kender ikke dit konkrete  problem, men et skud fra hoften ville nok være at findes en løsning der var mere enkel (i stil med at gemme "enum" væriderne i en liste og slå dem op når de skal bruges)...
Avatar billede sovsekoder Nybegynder
17. december 2005 - 22:05 #6
har læst på nettet om een der brugte (bl.a.) dynamisk enum oprettelse. Han gemte dog den emittede kode i en dll. Denne .dll blev der så refereret til i en solution. På denne måde kunne man kontrollere hvilke enums, der var lovlige i koden. Så man havde en slags "regl"-database, som dannede grundlag for hvilke værdier (enums) der kunne bruges i deres kode. Men i det tilfælde var den dynamiske enum-oprettelse et pre-step til kompileringen af det egentlige projekt, og på den måde vidste compileren hvilke enums der var tilgængelige (og kunne altså derfor komme med fejl compile-time).
Avatar billede sovsekoder Nybegynder
17. december 2005 - 22:06 #7
...jeg kunne godt tænke mig at høre hvad du skal bruge teknikken til? (oprettelse af dynamisk enum)
Avatar billede m_els Nybegynder
18. december 2005 - 00:19 #8
Mit problem er at jeg skal lave en webpart til sharepoint hvor en property på webparten skal sættes udfra en dropdown. Problemet med webparts er bare hvis jeg skal lave en dropdown, skal det gøres udfra enums. Og det er her det ikke helt hænger sammen, jeg kender nemlig ikke værdierne compile time...

Se evt følgende link:
http://www.15seconds.com/issue/040218.htm

Håber det var til at forstå :-)
Avatar billede sovsekoder Nybegynder
18. december 2005 - 18:43 #9
jeg har ingen erfaring med webparts. Min umidlbare indskydelse er nok:

** det ser ud til at din drop down angives som en property på din klasse (en property der returnerer en enum-type). Typen af denne enum skal være kendt for at kunne kompilere klassen, og da du ikke kender typen af din enum på kompilerings tidspunktet (men først run-time), kan problemet ikke løses på denne måde.

hvofor er den mon sådan:
(aner det ikke, men kan da gætte - du har sikkert bedre forstand på det end mig). Jeg går ud fra at der er en mening med at sharepoint er designet på denne måde (at den bruger en enum). Som jeg forstår dig, ønsker du at have en webpart der har en property der kan ændre sine mulige værdier run-time. Hvis den property f.eks. er en farve:
enum Color
{
  Blue,
  Red
}

...og jeg går ind i webpartens property og vælger f.eks. Blue. Men lige efter jeg har valgt den ændrer webpartens property til:

enum Color
{
  Yellow,
  Red
}

...og blue er lige pludselig ikke gyldig længere - det ville vel være et problem? at man har en forventning om at en property er sat, men øjeblikket efter er property'en ugyldig.

men som sagt, så aner jeg ikke noget om webparts og sharepoint - så mine "gæt" kan meget vel være skudt forbi...
Avatar billede sovsekoder Nybegynder
18. december 2005 - 18:51 #10
hvis du derimod ønsker at have en mulighed for at "opdatere" din webpart automatisk, kan det måske godt lade sig gøre!?:
1) lav et tool: "UpdateWebpartWithNewEnum". Toolet genererer en CustomPropertyValues.dll. Denne .dll indeholder din enum og bruges af din webpart.
2) dit webpart-projekt har en reference til din CustomPropertyValues.dll og finder typen  på din enum-property i denne dll.
3) når din webpart skal opdateres automatisk, køres "UpdateWebpartWithNewEnum" toolet, og din webpart rekompileres.
Avatar billede m_els Nybegynder
18. december 2005 - 18:59 #11
Jeg tror du har ret i dit gæt.
Læg et svar...
Avatar billede sovsekoder Nybegynder
18. december 2005 - 23:12 #12
[svar] - sæføli' ærgeligt at du ikke får fixet problemet :|
Avatar billede m_els Nybegynder
19. december 2005 - 00:01 #13
Jah... jeg finder nok på noget :-) tak for din indsats...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester