C# 从字符串解析枚举值时是否避免异常?
在本例中:C# 从字符串解析枚举值时是否避免异常?,c#,.net,C#,.net,在本例中: try { this.myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), queryStringKeyValue); } catch (Exception) { this.myEnum = null; } 如何避免引入对捕获泛型异常的依赖?我没有从ReSharper那里得到任何线索。理想情况下,我想摆脱try/catch。试试看 TryParse(Of TEnum)(String,TEnum)与Parse(Type,String)
try
{
this.myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), queryStringKeyValue);
}
catch (Exception)
{
this.myEnum = null;
}
如何避免引入对捕获泛型异常的依赖?我没有从ReSharper那里得到任何线索。理想情况下,我想摆脱try/catch。试试看
TryParse(Of TEnum)(String,TEnum)与Parse(Type,String)方法相同,只是如果转换失败,它不会抛出异常,而是返回false。它消除了在解析枚举值的字符串表示形式时进行异常处理的需要
您可以使用
Enum.TryParse()
消除异常,例如
MyEnum myEnum;
if (Enum.TryParse<MyEnum>(queryStringKeyValue, out myEnum))
{
// successfully parsed enum
}
MyEnum-MyEnum;
if(Enum.TryParse(queryStringKeyValue,out myEnum))
{
//已成功解析枚举
}
改用Enum.TryParse()。它返回一个布尔值来表示成功或失败,并且它是通用的,因此它还可以为您节省施法的时间
bool success = Enum.TryParse(queryStringKeyValue, out this.myEnum);
此外,您不应该能够为枚举分配null,假设字段实际上不是
MyEnum?
类型,正如其他人所说,TryParse方法在失败时返回布尔值,而不是引发异常。但同时,请看。它列出了可能引发的异常,因此您可以像ArgumentException一样捕捉被引发的特定异常,而不是捕捉泛型异常。该页面上的示例显示捕获ArgumentException。this.myEnum=(myEnum)Enum.Parse(typeof(myEnum),queryStringKeyValue)代码>在这里,我为您去掉了try/catch。请注意,枚举类型是不可为null的值类型,因此catch块中的代码实际上不会编译,除非您指定this.myEnum
成员的类型为myEnum?
,这是Nullable
完全忽略的TryParse的语法糖。就是这样。谢谢你接受,但我不是第一个提出这个建议的人。投票支持其他人。他们在我面前说了这句话。+1展示了一个真实世界使用的好例子和一个可以应用于许多TryParse
情况的模式。不过,一个参考链接会很好。