C#相当于VB.NET的Catch…何时
-
05-07-2019 - |
题
在VB.NET中我经常 Catch…当
:
Try
…
Catch e As ArgumentNullException When e.ParamName.ToUpper() = "SAMPLES"
…
End Try
C#是否等同于 Catch…何时
?
如果可能的话,我不想在 catch
中使用 if
语句。
解决方案
此功能已针对C#6发布。现在可以编写
try { … }
catch (MyException e) when (myfilter(e))
{
…
}
您可以下载 Visual Studio的预览2015年现在要检查这个,或者等待官方发布。
其他提示
在C#中没有等同于 Catch…
的时候。你将真的不得不求助于 catch
中的 if
语句,然后重新抛出你的条件是否满足:
try
{
…
}
catch (ArgumentNullException e)
{
if ("SAMPLES" == e.ParamName.ToUpper())
{
… // handle exception
}
else
{
throw; // condition not fulfilled, let someone else handle the exception
}
}
这不会重新创建与VB Catch When表达式相同的语义。有一个关键的区别。 VB表达式在堆栈展开之前执行。如果要在过滤时检查堆栈,您实际上会看到抛出异常的帧。
在catch块中有一个if是不同的,因为catch块在解除堆栈后执行。这在错误报告方面尤为重要。在VB场景中,您可以使用包括故障在内的堆栈跟踪进行崩溃。在C#中无法获得该行为。
编辑:
写了一篇有关该主题的详细博客文章。
不隶属于 StackOverflow