Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从字符串解析枚举值时是否避免异常?_C#_.net - Fatal编程技术网

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
情况的模式。不过,一个参考链接会很好。