C#相当于VB.NET的Catch ……当
在VB.NET中我经常Catch…When
:
Try … Catch e As ArgumentNullException When e.ParamName.ToUpper() = "SAMPLES" … End Try
有没有C#等同于Catch…When
?
如果可能的if
我不想在catch
使用if
语句。
此function已针对C#6发布。现在可以编写
try { … } catch (MyException e) when (myfilter(e)) { … }
您现在可以下载Visual Studio 2015的预览版以查看它,或者等待官方发布。
没有相当于Catch…When
在C#中。 你真的不得不在你的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表达式在堆栈展开之前执行。 如果要在过滤时检查堆栈,您实际上会看到抛出exception的帧。
在catch块中有一个if是不同的,因为catch块在解除堆栈后执行。 这在错误报告方面尤为重要。 在VB场景中,您可以使用包含故障的堆栈跟踪进行崩溃。 在C#中无法获得该行为。
编辑:
写了一篇关于这个主题的详细博客文章 。