我有一个方法尝试将字符串与枚举值的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
}
Run Code Online (Sandbox Code Playgroud)
我该怎么编码上面的?
Jon*_*eet 13
您可以使用
return (Enum) Activator.CreateInstance(enumType);
Run Code Online (Sandbox Code Playgroud)
这将为您提供该类型的默认值 - 这就是您想要的.
编辑:我希望你在编译时知道类型,在这种情况下泛型是一个很好的方法.尽管情况似乎并非如此,但我将留下其余的答案,以防其他人使用它.
或者,您可以使用Unconstrained Melody,它已经包含类似此功能的更高效,类型安全的形式:)
MyEnum value;
if (Enums.TryParseDescription<MyEnum>(description, out value))
{
// Parse successful
}
Run Code Online (Sandbox Code Playgroud)
value 如果解析操作不成功,将设置为"0"值.
目前它区分大小写,但您可以轻松创建不区分大小写的版本.(或者让我知道,我可以这样做.)