当前位置:  开发笔记 > 编程语言 > 正文

C#相当于VB.NET的Catch ......当

如何解决《C#相当于VB.NET的Catch当》经验,为你挑选了3个好方法。

在VB.NET中,我经常Catch…When:

Try
    …
Catch e As ArgumentNullException When e.ParamName.ToUpper() = "SAMPLES"
    …
End Try

是否有C#相当于Catch…When

如果可能ifcatch话,我不想诉诸于使用声明.



1> cruizer..:

Catch…When在C#中没有相同的东西.你真的不得不求助于if你的内部声明catch,然后重新抛出你的条件是否满足:

try
{
    …
}
catch (ArgumentNullException e)
{
    if ("SAMPLES" == e.ParamName.ToUpper())
    {
        … // handle exception
    }
    else
    {
        throw;  // condition not fulfilled, let someone else handle the exception
    } 
}


我正在使用巡洋舰和Nicholas Mancuso,只需使用'throw'保留堆栈[错误每个C#程序员制作](http://msmvps.com/blogs/nickwienholt/archive/2006/07/04/103778.aspx"每个C#程序员的错误都会产生")

2> Joe..:

这个功能是为C#6宣布的.现在可以写了

try { … }
catch (MyException e) when (myfilter(e))
{
    …
}

您现在可以下载Visual Studio 2015的预览版以查看它,或者等待官方发布.



3> JaredPar..:

这不会重新创建与VB Catch When表达式相同的语义.有一个关键的区别.VB表达式在堆栈展开之前执行.如果要在过滤时检查堆栈,您实际上会看到抛出异常的帧.

在catch块中有一个if是不同的,因为catch块在解除堆栈后执行.这在错误报告方面尤为重要.在VB场景中,您可以使用包括故障在内的堆栈跟踪进行崩溃.在C#中无法获得该行为.

编辑:

写了一篇关于这个主题的详细博客文章.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有