我有这个代码块:
try
{
int QuestionAnswerID = 0;
// code block which assign value to QuestionAnswerID
item.QuestionAnswerID = QuestionAnswerID;
}
catch (NullReferenceException)
{
item.QuestionAnswerID = -999;
}
这在一个循环中运行,这肯定会在循环内进入catch块2-3次。这段代码正是我想要的,但只是想知道使用try-catch块处理已知问题是不好的做法。
如果我在抛出偏离之前使用if语句/ s来识别空值,那会更有效吗?
答案 0 :(得分:11)
是的,这是不好的做法,因为抛出和捕获异常非常昂贵,并且异常不应该用于常规操作,仅用于错误处理。
解决此问题的首选方法是自己检查对象是否为null
并正确处理该情况。
答案 1 :(得分:2)
使用try / catch是否更“昂贵”(即更慢)应该看起来不像代码可靠性那么重要。你有效地使用代码的是:
block of code where something may go wrong
various things occur
specific thing that you have anticipated might cause an error occurs
various things occur
set return state to valid value
end of block where something may go wrong
if something went wrong
set return state to invalid value
end if
return return state
最终会出现一段代码,在某些阶段可能会出现问题。你围绕一个预期的问题设计它,但可能会出现其他问题,你会隐藏它们。通过使用if (specific thing == null)
在您希望问题发生的特定点测试null,然后您可以避免掩盖您没有预料到的潜在问题。
答案 2 :(得分:1)
尝试捕获是相对昂贵的操作,只应在“特殊情况下”使用,不应在您计划的情况下使用。
编辑:
我的意思更好的例子:
不应将异常用于更改程序的流程作为一部分 普通的执行。例外只应用于报告和 处理错误条件。