分析字符串中的枚举值时避免出现异常

本文关键字:异常 字符串 枚举 | 更新日期: 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。