C# 等同于 VB.网的收获..什么时候
本文关键字:收获 什么时候 等同于 VB | 更新日期: 2023-09-27 17:47:21
在 VB.NET 中,我经常Catch…When
:
Try
…
Catch e As ArgumentNullException When e.ParamName.ToUpper() = "SAMPLES"
…
End Try
是否有等效于Catch…When
的 C#?
如果可能的话,我不想在catch
中使用if
语句。
此功能已在 C# 6 中宣布。现在可以写了
try { … }
catch (MyException e) when (myfilter(e))
{
…
}
您现在可以下载Visual Studio 2015的预览版来查看,或者等待正式发布。
在 C# 中没有等效的 Catch…When
。你真的必须在你的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 When 表达式。 如果要在 when Filter 点检查堆栈,您实际上会看到引发异常的帧。
在 catch 块中有一个 if 是不同的,因为 catch 块在堆栈展开后执行。 这在错误报告方面尤其重要。 在 VB 场景中,您可以使用堆栈跟踪(包括故障)崩溃。 在 C# 中无法获得该行为。
编辑:
写了一篇关于这个主题的详细博客文章。