【发布时间】:2008-10-20 15:16:01
【问题描述】:
与一位同事就他将大部分功能包装在 try/catch 中的做法进行了“激烈辩论”,但 catch 中只有一个“抛出”,例如
Private sub foo()
try
'Do something'
catch
throw 'And nothing else!'
End Try
End Sub
我的想法是不要打扰(假设您此时不需要做任何事情) - 异常会冒泡到父成员中的下一个异常处理程序。
唯一听起来合理的论点是有时没有捕获异常并且您的代码停止(在调试模式下),当前行以绿色突出显示......这可能与多线程有关? 最佳实践确实声明“每个线程都有一个异常处理程序”,但大多数情况下我们都是单线程工作的。
好消息是在调试模式下不会突然弹出给父成员(是的,乔尔!)可能很有用 - 您将转到“抛出”语句并能够检查您的本地成员。 但是你的代码会“到处都是 try/catch/throws”(在这里引用另一个线程)?
如果没有异常发生(即您是否应该避免在紧密循环中尝试/捕获),那么到处添加 try/catch/throws 会涉及什么样的开销?
【问题讨论】:
-
把你的VB代码整理出来,看起来很可怕。
-
晚上 11 点尝试用一只手和一个蠕动的婴儿打字! 80/20 - 完成这项工作。
-
没有提到多线程的好处——我是否认为它不相关?
-
而且我认为 MSIL 至少会插入一行或 2 行作为 try/catch(MSIL 对我来说是希腊语),所以“不要这样做”的普遍共识是有道理的。跨度>
-
感谢大家 - 似乎这样做不是最好的,Jon 的 Ctrl+Alt+E 打破所有是正确的(不确定最好的)替代方案。仍然想知道多线程位......但这一切都符合通常的标准实践。