У меня есть следующие методы в классе enum helper (я упростил его для целей вопроса):
static class EnumHelper
{
public enum EnumType1 : int
{
Unknown = 0,
Yes = 1,
No = 2
}
public enum EnumType2 : int
{
Unknown = 0,
Dog = 1,
Cat = 2,
Bird = 3
}
public enum EnumType3
{
Unknown,
iPhone,
Andriod,
WindowsPhone7,
Palm
}
public static EnumType1 ConvertToEnumType1(string value)
{
return (string.IsNullOrEmpty(value)) ?
EnumType1.Unknown :
(EnumType1)(Enum.Parse(typeof(EnumType1), value, true));
}
public static EnumType2 ConvertToEnumType2(string value)
{
return (string.IsNullOrEmpty(value)) ?
EnumType2.Unknown :
(EnumType2)(Enum.Parse(typeof(EnumType2), value, true));
}
public static EnumType3 ConvertToEnumType3(string value)
{
return (string.IsNullOrEmpty(value)) ?
EnumType3.Unknown :
(EnumType3)(Enum.Parse(typeof(EnumType3), value, true));
}
}
Таким образом, вопрос здесь заключается в том, можно ли обрезать это до метода расширения Enum или, возможно, какого-то одного типа метода, который может обрабатывать любой тип. Я нашел несколько примеров, чтобы сделать это с базовыми перечислениями, но разница в моем примере состоит в том, что все перечисления имеют элемент Unknown
, который мне нужно вернуть, если строка пуста или пуста (если совпадение не найдено, я хочу, чтобы оно не получилось) .
Может быть поискать что-то вроде следующего:
EnumType1 value = EnumType1.Convert("Yes");
// or
EnumType1 value = EnumHelper.Convert(EnumType1, "Yes");
Одна функция, которая делает все это ... как обращаться с элементом Unknown
- это часть, на которой я зависаю.
Редактировать: Исправлено одно из перечислений, чтобы не быть определенными с целыми числами. Таким образом, я могу гарантировать, что 0 всегда будет иметь место, но Unknown
всегда будет правильным текстом ... Я думаю, я мог бы использовать тот же пример, что и T (0), но выполнить другой анализ текста "Неизвестно".