Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Possible to load an Enum based on a string name?

Tags:

c#

enums

OK, I don't think the title says it right... but here goes:

I have a class with about 40 Enums in it. i.e:

    Class Hoohoo
    {

       public enum aaa : short
       {
          a = 0,
          b = 3
       }

      public enum bbb : short
      {
        a = 0,
        b = 3
      }

      public enum ccc : short
      {
        a = 0,
        b = 3
      }
}

Now say I have a Dictionary of strings and values, and each string is the name of above mentioned enums:

Dictionary<string,short>{"aaa":0,"bbb":3,"ccc":0}

I need to change "aaa" into HooBoo.aaa to look up 0. Can't seem to find a way to do this since the enum is static. Otherwise I'll have to write a method for each enum to tie the string to it. I can do that but thats mucho code to write.

Thanks, Cooter

like image 626
Cooter Avatar asked Mar 25 '10 03:03

Cooter


2 Answers

You'll have to use Reflection to get the underlying enum type:

Type t = typeof(Hoohoo);
Type enumType = t.GetNestedType("aaa");
string enumName = Enum.GetName(enumType, 0);

If you want to get the actual enum value, you can then use:

var enumValue = Enum.Parse(enumName, enumType);
like image 67
Aaronaught Avatar answered Sep 30 '22 02:09

Aaronaught


Use

aaa myEnum =(aaa) Enum.Parse(typeof(aaa), "a");
like image 30
Graviton Avatar answered Sep 30 '22 00:09

Graviton