在这个例子中:
try
{
this.myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), queryStringKeyValue);
}
catch (Exception)
{
this.myEnum = null;
}
如何避免引入依赖于捕获一般异常?我从ReSharper那里得不到任何线索。理想情况下,我想摆脱try / catch。
答案 0 :(得分:5)
尝试查看Enum.TryParse
TryParse(Of TEnum)(String,TEnum)与Parse(Type,String)方法相同,不同之处在于,如果转换失败,它将返回false,而不是抛出异常。在解析枚举值的字符串表示时,它消除了对异常处理的需要。
答案 1 :(得分:3)
您可以使用Enum.TryParse()
消除异常,例如
MyEnum myEnum;
if (Enum.TryParse<MyEnum>(queryStringKeyValue, out myEnum))
{
// successfully parsed enum
}
答案 2 :(得分:3)
正如其他人所说,TryParse方法在失败时返回布尔值而不是抛出异常。但是,请看http://msdn.microsoft.com/en-us/library/essfb559.aspx。它列出了可能抛出的异常,因此您可以捕获像ArgumentException一样抛出的特定异常,而不是捕获通用异常。该页面上的示例显示了捕获ArgumentException。
答案 3 :(得分:2)
使用Enum.TryParse()代替。它返回一个布尔值来表示成功或失败,并且它是通用的,因此它也可以节省你对于转换的麻烦。
bool success = Enum.TryParse(queryStringKeyValue, out this.myEnum);
此外,您应该无法为枚举分配null,假设该字段实际上不是MyEnum?
类型。