Try-Catch异常滥用

时间:2016-04-19 03:29:30

标签: c# try-catch

我找到了一些像这样的代码:

try 
{
    myClass.do().ToString();
} catch () { }

do()返回null时,肯定会导致异常被抛出。相反,您可以使用

(myClass.do() ?? "").ToString();

避免抛出异常。我也看到这样的代码:

for (int i = 0; i < x.length; i++)
{
    if (x.Phases[i].num == activeNum)
    {
        try
        {
           result = x.Phases[i + 1].obj;
        }
        catch (Exception ex) {  }
    }
}

我认为这不是好习惯。但是,我找不到任何支持我的想法的参考资料。

我试图在网上搜索,但我没有运气。大多数参考或文档都是针对C ++或Java的。

请您帮我用强有力的参考证明我的想法,或者如果以上的方法实际上是可以接受的,请告诉我。

2 个答案:

答案 0 :(得分:3)

你是对的:使用异常来控制流量通常是不好的做法。出于这个原因,它通常被称为anti-pattern

您可以找到详细解释here。虽然本文引用了Java和C ++,但出于同样的原因,它也是C#中的反模式。

有关C#/。Net的具体说明,请参阅此MSDN article

答案 1 :(得分:1)

你的直觉是正确的。异常处理很慢。

分支(例如for循环终止时的基础跳转)非常快。

不要把时间浪费在异常处理上作为流量控制的手段。