Avatar billede spif2001 Nybegynder
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];
Avatar billede arne_v Ekspert
31. maj 2005 - 13:02 #1
Enum.GetNames(typeof(MY_ENUM)).Length

måske
Avatar billede arne_v Ekspert
31. maj 2005 - 13:05 #2
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 !
Avatar billede spif2001 Nybegynder
31. maj 2005 - 13:08 #3
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 ;)
Avatar billede arne_v Ekspert
31. maj 2005 - 13:10 #4
svar
Avatar billede arne_v Ekspert
31. maj 2005 - 13:12 #5
Husk at fortæl dinr kollegaer at de ikke må:

public enum MY_ENUM
{
  EN,
  EN_OG_EN_HALV,
  TO,
  TRE = 77
}
Avatar billede spif2001 Nybegynder
31. maj 2005 - 13:15 #6
?? hvorfor ikke?

Enum.GetNames(typeof(MY_ENUM)).Length giver da den samme værdi...
Avatar billede arne_v Ekspert
31. maj 2005 - 13:49 #7
ja, men objArr[TRE] virker jo nok ikke så godt ...
Avatar billede spif2001 Nybegynder
31. maj 2005 - 14:01 #8
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...
Avatar billede spif2001 Nybegynder
31. maj 2005 - 14:37 #9
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;
        }
    }
}
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