我找到了一些像这样的代码:
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的。
请您帮我用强有力的参考证明我的想法,或者如果以上的方法实际上是可以接受的,请告诉我。
答案 0 :(得分:3)
你是对的:使用异常来控制流量通常是不好的做法。出于这个原因,它通常被称为anti-pattern。
您可以找到详细解释here。虽然本文引用了Java和C ++,但出于同样的原因,它也是C#中的反模式。
有关C#/。Net的具体说明,请参阅此MSDN article。
答案 1 :(得分:1)
你的直觉是正确的。异常处理很慢。
分支(例如for循环终止时的基础跳转)非常快。
不要把时间浪费在异常处理上作为流量控制的手段。