Как получить значение неизвестного enum по имени enum и имени значения?

Извините за задание этого вопроса, но я не нашел правильного решения для этой задачи:

У меня есть Enum, который называется "myEnum" (MyEnum не известен этой функции) Мне нужно получить значение int значения myEnum

Пример:
Программист назвал его enum "myEnum" :

 public enum myEnum
 {
     foo = 1,
     bar = 2,
 }

моя функция должна делать следующее:    Получите значение "foo" из "myEnum" по строке

Функция

должна открываться:

 public int GetValueOf(string EnumName, string EnumConst)
 {

 }

поэтому, когда Programmer A открывает его:

 int a = GetValueOf("myEnum","foo");

он должен вернуть 1

и когда Programmer B имеет Enum с именем "mySpace", хочет вернуть "bar" со значением 5

int a = GetValueOf("mySpace","bar")

должен вернуть 5

как я могу это сделать?

Ответы

Ответ 1

Вы можете использовать Enum.Parse для этого, но вам потребуется полное имя типа типа Enum, то есть: "SomeNamespace.myEnum":

public static int GetValueOf(string enumName, string enumConst)
{
    Type enumType = Type.GetType(enumName);
    if (enumType == null)
    {
        throw new ArgumentException("Specified enum type could not be found", "enumName");
    }

    object value = Enum.Parse(enumType, enumConst);
    return Convert.ToInt32(value);
}

Также обратите внимание, что вместо используется Convert.ToInt32. Это будет обрабатывать значения перечисления с базовыми типами, которые не являются Int32. Тем не менее, это все равно вызовет OverflowException, если ваше перечисление имеет базовое значение вне диапазона Int32 (т.е. Если это улунг как значение > int.MaxValue).

Ответ 2

Попробуйте

int result = (int) Enum.Parse(Type.GetType(EnumName), EnumConst);

Ответ 4

Мне не ясно, если имя типа перечисления должно быть указано как строка.

Вам нужно использовать Enum.TryParse, чтобы получить значение Enum. В сочетании с общим методом вы можете сделать что-то вроде этого:

public int? GetValueOf<T>(string EnumConst) where T : struct
{
    int? result = null;

    T temp = default(T);
    if (Enum.TryParse<T>(EnumConst, out temp))
    {
        result = Convert.ToInt32(temp);
    }

    return result;
}

Чтобы вызвать его, используйте это:

int? result = GetValueOf<myEnum>("bar");
if (result.HasValue)
{
    //work with value here.
}