[英]Return default Enum value when Enum type is not known
我有一個方法嘗試將字符串與枚舉值的 DescriptionAttribute 匹配,然后返回枚舉值。 如果找不到匹配項,它應該返回一個默認值,我以為我可以只返回 0。但它不會發生......
private Enum GetEnumFromDescription(Type enumType, string description)
{
var enumValues = Enum.GetValues(enumType);
foreach (Enum e in enumValues)
{
if (string.Compare(description, GetDescription(e), true) == 0)
return e;
}
return 0; // not compiling
}
我應該如何編碼上述內容?
您可以使用
return (Enum) Activator.CreateInstance(enumType);
這將為您提供類型的默認值 - 這就是您想要的。
編輯:我希望你在編譯時知道類型,在這種情況下泛型是一個很好的方法。 即使情況似乎並非如此,我還是會留下這個答案的其余部分,以防對其他人有用。
或者,您可以使用Unconstrained Melody ,它已經以更高效、類型安全的形式包含了類似的功能:)
MyEnum value;
if (Enums.TryParseDescription<MyEnum>(description, out value))
{
// Parse successful
}
如果解析操作不成功, value
將設置為“0”值。
目前它區分大小寫,但您可以輕松創建不區分大小寫的版本。 (或者讓我知道,我可以這樣做。)
我相信正確的方法是
(Enum)Enum.ToObject(enumType, 0)
因為
Activator.CreateInstance
是所有值類型的通用解決方案, Enum.ToObject
是枚舉的特定解決方案,因此Enum.ToObject
聲明了代碼的明確意圖。Enum.ToObject
可能比Activator.CreateInstance
工作得更快Enum.ToObject
在Enum.GetValues
用於檢索值。default(T) 將為此工作。 獲取類型並使用默認值。 默認情況下,第一個元素將被視為默認值
也許這會奏效
return (Enum)enumValues[0];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.