2009-08-10 2 views
1

Я пытаюсь написать метод, который анализирует параметр строки в перечисление. Тип перечисления также определяется параметром. Это то, что я начал с:Использование 'Type' и 'Enum' в качестве параметров в .NET

public static type GetValueOrEmpty(string text, Type type) 
{ 
    if (!String.IsNullOrEmpty(text)) 
    { 
     return (type)Enum.Parse(typeof(type)value); 
    } 
    else 
    { 
     // Do something else 
    } 
} 

Очевидно, что это не сработает по ряду причин. Есть ли способ сделать это?

+1

Для решения, которое включает в себя nullabe перечислений и дополнительные возможности проверить https://gist.github.com/DoggettCK/1305566 –

ответ

14

Вы можете сделать это родовое вместо этого, если вы знаете тип во время компиляции:

public static T GetValueOrEmpty<T>(string text) 
{ 
    if (!String.IsNullOrEmpty(text)) 
    { 
     return (T) Enum.Parse(typeof(T), text); 
    } 
    else 
    { 
     // Do something else 
    } 
} 

Если вы не знаете тип во время компиляции, то имея метод вернуть тот тип выиграл» Вам будет очень полезно. Вы можете сделать это вернуть object конечно:

public static object GetValueOrEmpty(string text, Type type) 
{ 
    if (!String.IsNullOrEmpty(text)) 
    { 
     return Enum.Parse(type, text); 
    } 
    else 
    { 
     // Do something else 
    } 
} 

Если ни один из них полезны для вас, пожалуйста, дайте больше информации о том, что вы пытаетесь достичь.

+1

Должен ли я увеличить ваши ответы? Вероятно, вы даже не заметили +10 с вашей репутацией. ;) –

+0

@SarahVessels: ваш комментарий настолько забавный сегодня. –

3

Вам необходимо использовать общий метод. Нечто подобное должно сделать трюк:

public static TEnum ParseEnum<TEnum>(string s) 
{ 
    return (TEnum)Enum.Parse(typeof(TEnum), s); 
} 

EDIT: Исправлена ​​опечатка в коде ...

+1

Мне нравится добавлять ограничение типа TEnum: struct для этих методов, чтобы попытаться ограничить типы, на которые он может быть вызван (C# не допускает ограничение «enum», «struct» является следующим лучшим вещь...) – thecoop

Смежные вопросы