处理异常

时间:2011-04-27 16:58:08

标签: c# exception-handling

我需要知道这两个处理异常的女巫更好,为什么?或者其他一些做得更好的方法。

try{
                if (String.IsNullOrEmpty(filePath))
                {
                    throw new ArgumentNullException("The path is null or empty.", "filePath");
                }

 try{
                if (String.IsNullOrEmpty(filePath))
                {
                    Console.WriteLine("The path is null or empty");
                } 

6 个答案:

答案 0 :(得分:2)

我会推荐第二种方法,除了在这种情况下你不需要try / catch。例外情况是处理例外案例。如果您可以阻止这些if条件的情况,您应该更喜欢这个。如果你是一些性能优化狂,你可能已经知道抛出和捕获异常可能比测试条件更昂贵。

答案 1 :(得分:2)

如果没有路径破坏整个应用程序流,抛出异常是个好主意,这样您就可以恢复应用程序的状态以进行另一次尝试,或者向用户显示一个对话框。

另一方面,Console.WriteLine("The path is null or empty");只是通知用户情况并继续前进。如果您的执行流程没有受到损害,这将为您的应用程序增加最小的开销,因此更可取。

答案 2 :(得分:0)

请改用code contracts。特别是像前提条件(例如你的例子)。

答案 3 :(得分:0)

如果情况是预期的错误,请使用返回代码或类似内容。就像文件不存在一样

如果是意外情况(null作为参数),请使用excpetion。

异常处理很昂贵,所以要明智地使用。

HTH

马里奥

答案 4 :(得分:0)

好吧,首先在第二个代码中你没有抛出任何异常,你只需向控制台写一条消息。这意味着第二个不会在Windows窗体或wpf应用程序中发出任何信号,或者更糟糕的是 - Web应用程序。 除此之外,通过抛出异常,您可以在应用程序的另一个阶段拦截它,并且相应地运行,而Console.WriteLine仅特定于您调用它的范围。

您可能还想考虑是否适合抛出异常。这种情况发生在您的代码可以轻轻处理“异常”情况的所有情况下,例如提供默认值等。

答案 5 :(得分:0)

我不能肯定地说这是因为你的其他节目不在那里;但我猜第一个选择是杀死你的程序,而第二个选项只是打印一些东西到控制台然后继续你的程序的其余部分。所以这个问题的答案更多地取决于希望它做什么?当这种情况发生时,希望程序死掉吗?抛出异常而不处理它。想要在发生这种情况时重新篡改用户?然后使用你的第二个选项,但将你的IF语句转换为while循环,然后只提示直到条件不再为真。