我寫了一些枚舉功能,並有以下幾點:空轉換可空枚舉(通用)
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爲空的錯誤。
有誰知道如何解決這個問題?
謝謝大家!
究竟爲什麼你調用類型初始化?在我9年的C#中,我從來沒有**需要這樣做! – leppie 2010-09-28 08:37:09
實際上,這個類型初始化器甚至不會返回任何東西。代碼是假的,對不起。 – leppie 2010-09-28 08:38:33
@leppie,因此我發佈了這個問題。我正在尋找一種方法來做到這一點,顯然TypeInitializer不是這樣做的正確方法。以下來自Preet的回答是我正在尋找的。 – Richard 2010-09-28 08:51:47