我想编写一个函数,它可以根据 enum
的可能值验证给定值(作为字符串传递)。在匹配的情况下,它应该返回枚举实例;否则,它应该返回一个默认值。
该函数可能不会在内部使用 try
/catch
,这排除了使用 Enum.Parse
,这会在给定无效参数时抛出异常.
我想使用类似于 TryParse
函数的方式来实现:
public static TEnum ToEnum<TEnum>(this string strEnumValue, TEnum defaultValue)
{
object enumValue;
if (!TryParse (typeof (TEnum), strEnumValue, out enumValue))
{
return defaultValue;
}
return (TEnum) enumValue;
}
最佳答案
Enum.IsDefined 将完成任务。它可能不像 TryParse 那样高效,但它可以在没有异常处理的情况下工作。
public static TEnum ToEnum<TEnum>(this string strEnumValue, TEnum defaultValue)
{
if (!Enum.IsDefined(typeof(TEnum), strEnumValue))
return defaultValue;
return (TEnum)Enum.Parse(typeof(TEnum), strEnumValue);
}
值得注意:一个TryParse
方法是在 .NET 4.0 中添加的。
关于c# - 如何尝试解析枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1082532/