从字符串解析枚举值时避免异常?

时间:2012-01-19 01:37:40

标签: c# .net

在这个例子中:

try
{
    this.myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), queryStringKeyValue);
}
catch (Exception)
{
    this.myEnum = null;
}

如何避免引入依赖于捕获一般异常?我从ReSharper那里得不到任何线索。理想情况下,我想摆脱try / catch。

4 个答案:

答案 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?类型。