使用Try-Catch来处理看到的错误,是不是很糟糕?

时间:2013-10-22 08:42:15

标签: c# try-catch

我有这个代码块:

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来识别空值,那会更有效吗?

3 个答案:

答案 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)

尝试捕获是相对昂贵的操作,只应在“特殊情况下”使用,不应在您计划的情况下使用。

编辑:

我的意思更好的例子:

  

不应将异常用于更改程序的流程作为一部分   普通的执行。例外只应用于报告和   处理错误条件。

http://msdn.microsoft.com/en-us/library/ms173163.aspx