Я пишу некоторые функциональные возможности Enum, и следующее:Преобразование Null в Nullable Enum (Generic)
public static T ConvertStringToEnumValue<T>(string valueToConvert,
bool isCaseSensitive)
{
if (String.IsNullOrWhiteSpace(valueToConvert))
return (T)typeof(T).TypeInitializer.Invoke(null);
valueToConvert = valueToConvert.Replace(" ", "");
if (typeof(T).BaseType.FullName != "System.Enum" &&
typeof(T).BaseType.FullName != "System.ValueType")
{
throw new ArgumentException("Type must be of Enum and not " +
typeof (T).BaseType.FullName);
}
if (typeof(T).BaseType.FullName == "System.ValueType")
{
return (T)Enum.Parse(Nullable.GetUnderlyingType(typeof(T)),
valueToConvert, !isCaseSensitive);
}
return (T)Enum.Parse(typeof(T), valueToConvert, !isCaseSensitive);
}
Теперь я называю это следующим:
EnumHelper.ConvertStringToEnumValue<Enums.Animals?>("Cat");
Это работает, как ожидалось , Однако, если я запустил это:
EnumHelper.ConvertStringToEnumValue<Enums.Animals?>(null);
он ломается с ошибкой, что TypeInitializer имеет значение NULL.
Кто-нибудь знает, как это решить?
Спасибо всем!
Почему на земле вы вызова типа инициализатору ?? В мои 9 лет C#, я ** никогда не должен был этого делать! – leppie
На самом деле этот инициализатор не возвращает ничего. Код поддельный, извините. – leppie
@leppie, отсюда мой вопрос. Я ищу способ сделать это, и, очевидно, TypeInitializer не является правильным способом сделать это. Нижеприведенный ответ от Preet - это то, что я искал. – Richard