分析字符串中的枚举值时避免出现异常
本文关键字:异常 字符串 枚举 | 更新日期: 2023-09-27 18:20:48
在本例中:
try
{
this.myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), queryStringKeyValue);
}
catch (Exception)
{
this.myEnum = null;
}
如何避免引入对捕获一般异常的依赖?我没有从ReSharper那里得到任何线索。理想情况下,我想摆脱尝试/接球。
尝试查看Enum.TryParse
TryParse(Of TEnum)(String,TEnum)与Parse(Type,String)方法相同,只是如果转换失败,它不会抛出异常,而是返回false。它消除了在解析枚举值的字符串表示时进行异常处理的需要。
您可以使用Enum.TryParse()
来消除异常,例如
MyEnum myEnum;
if (Enum.TryParse<MyEnum>(queryStringKeyValue, out myEnum))
{
// successfully parsed enum
}
请改用Enum.TryParse()。它返回一个布尔值来指示成功或失败,而且它是通用的,所以它还可以省去选角的麻烦。
bool success = Enum.TryParse(queryStringKeyValue, out this.myEnum);
此外,假设该字段实际上不是MyEnum?
类型,则不应该将null分配给枚举。
正如其他人所说,TryParse方法在失败时返回布尔值,而不是抛出异常。但同时,看看http://msdn.microsoft.com/en-us/library/essfb559.aspx.它列出了可能抛出的异常,因此您可以捕获像ArgumentException这样抛出的特定异常,而不是捕获一般异常。该页面上的示例显示捕获ArgumentException。