我有一個關於解析字符串枚舉的奇怪問題。實際上,我的應用程序需要處理來自配置文件的少量枚舉的解析。但是,我不想爲每個枚舉類型編寫解析例程(因爲有很多)。c#中的通用枚舉字符串值分析器?
我面臨的問題是,下面的代碼顯示了一些奇怪的錯誤 - T的類型必須是一個不可爲空的值類型或類型的東西。我認爲枚舉默認是不可空的?
如果我使用where T : enum
限制T
的類型,則方法體內的所有其他內容(if Enum.TryParse
語句除外)都會被強調爲錯誤。
任何人都可以幫助這個奇怪的小問題?
感謝, 馬丁
public static T GetConfigEnumValue<T>(NameValueCollection config,
string configKey,
T defaultValue) // where T : enum ?
{
if (config == null)
{
return defaultValue;
}
if (config[configKey] == null)
{
return defaultValue;
}
T result = defaultValue;
string configValue = config[configKey].Trim();
if (string.IsNullOrEmpty(configValue))
{
return defaultValue;
}
//Gives me an Error - T has to be a non nullable value type?
if(! Enum.TryParse<T>(configValue, out result))
{
result = defaultValue;
}
//Gives me the same error:
//if(! Enum.TryParse<typeof(T)>(configValue, out result)) ...
return result;
}
要求張貼錯誤的文本的用戶(這是在代碼的時候,沒有編譯/運行時),所以這裏有雲:
的類型'T'必須是非空值類型,以便將其用作泛型類型或方法'System.Enum.TryParse(string,out TEnum)'中的參數TEnum'
你能附上錯誤?沒有where條件,它看起來像你的代碼應該工作。 – 2011-06-14 17:17:07
試試'where T:struct' – 2011-06-14 17:22:32
@ jdv-Jan de Vaan這樣做的工作?我的意思是我知道枚舉是真正的整數和整數是類型System.Int32結構...但它真的工作? – bleepzter 2011-06-14 17:28:32