31. maj 2005 - 13:00
Der er
8 kommentarer og 1 løsning
Antallet af værdier i en enum
Hej Er det muligt at få antallet af værdier i en enum? Ex. public enum MY_ENUM { EN, EN_OG_EN_HALV, TO } Hvordan finder jeg ud af, at der er 3 værdier i MY_ENUM dynamisk? Hvis jeg eksempelvis vil gøre følgende: object[] objArr = new object[antal af enum værdier];
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
Enum.GetNames(typeof(MY_ENUM)).Length måske
C# enums er ikke type safe så følgende bør også virke: MY_ENUM.TO - MY_ENUM.EN + 1 men det er ikke pænt !
Den første virkede fint - smid et svar :) Den næste duer ikke, da jeg ikke vil ændre i koden, der laver obj[] bare fordi jeg tilføjer en enum værdi. Vi kan jo ikke have, at en kollega tilføjer en enum værdi og så virker programmet ikke. Elsker vedligeholdelsesfri kode ;)
Husk at fortæl dinr kollegaer at de ikke må: public enum MY_ENUM { EN, EN_OG_EN_HALV, TO, TRE = 77 }
?? hvorfor ikke? Enum.GetNames(typeof(MY_ENUM)).Length giver da den samme værdi...
ja, men objArr[TRE] virker jo nok ikke så godt ...
ah - nej det gør det vel ikke. så må jeg jo bare ToString()'e TRE, og så checke dens plads i Enum.GetNames(typeof(MY_ENUM))... hvis det altså virker. Hmmm må hellere lige checke...
Virker fint - her er lidt kode til den interesserede: using System; namespace Test.EnumTest { public enum MY_ENUM { EN, EN_OG_EN_HALV, TO, TRE = 77 } class EnumTest { [STAThread] static void Main(string[] args) { try { int enumLength = Enum.GetNames(typeof(MY_ENUM)).Length; object[] objArr = new object[enumLength]; Console.WriteLine("Arr length: "+objArr.Length+"\n"); for(int i = 0; i < enumLength; i++) { objArr[i] = i; Console.WriteLine("Arr["+i+"] = "+objArr[i]); }//for Console.WriteLine("\nArr[TRE] = "+objArr[Get_MY_ENUM_Index(MY_ENUM.TRE)]); }//try catch(Exception e) { Console.WriteLine(e.Message); }//catch Console.WriteLine("\nPress return to close..."); Console.ReadLine(); } static int Get_MY_ENUM_Index(MY_ENUM enumValue) { string enumString = enumValue.ToString(); string[] enumStringList = Enum.GetNames(typeof(MY_ENUM)); for(int i = 0; i < enumStringList.Length; i++) if(enumStringList[i] == enumString) return i; return -1; } } }
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.