Как преобразовать строку в перечисление типа int? [Дубликат]

2

Возможный дубликат:
Как преобразовать строку в перечисление в С#?

У меня есть перечисление типа int:

public enum BlahType
{
       blah1 = 1,
       blah2 = 2
}

Если у меня есть строка:

string something = "blah1"

Как я могу преобразовать это в BlahType?

Теги:
enumeration

4 ответа

6
Лучший ответ

Вы хотите Enum.Parse

BlahType blahValue = (BlahType) Enum.Parse(typeof(BlahType), something); 
8

Я использую функцию, подобную этой

public static T GetEnumValue<T>(string value)
{
    return (T)Enum.Parse(typeof(T), value);
}

И вы можете так называть

BlahType value = GetEnumValue<BlahType>("Blah1");
  • 0
    Я тоже ... очень, очень полезно!
2

Я использую эту функцию для преобразования строки в перечисление; то вы можете использовать int или что угодно.

public static T ToEnum<T>(string value, bool ignoreUpperCase)
        where T : struct, IComparable, IConvertible, IFormattable {
        Type enumType = typeof (T);
        if (!enumType.IsEnum) {
            throw new InvalidOperationException();
        }
        return (T) Enum.Parse(enumType, value, ignoreUpperCase);
}
  • 0
    Хороший метод расширения. Мне просто интересно, почему он должен игнорировать только прописные буквы, а не просто игнорировать регистр? ;)
  • 1
    Когда я впервые выполнил эту функцию, я думал о проверке, является ли данный тип перечислением. Я сдался после обнаружения (с отражателем), что Enum.Parse уже делает эти проверки (и более) и выдает исключение ArgumentException, если тип не является enum.
Показать ещё 1 комментарий
1
    public enum BlahType
    {
        blah1 = 1,
        blah2 = 2
    }

    string something = "blah1";
    BlahType blah = (BlahType)Enum.Parse(typeof(BlahType), something);

Если вы не уверены, что преобразование будет успешным, вместо этого используйте TryParse.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню