异常处理

本文关键字:异常处理 | 更新日期: 2023-09-27 17:53:33

我需要知道这两种异常处理哪一种更好,为什么?或者用其他方法做得更好。

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");
                } 

异常处理

我推荐第二种方法,只是在这种情况下不需要try/catch。异常用于处理异常情况。如果你能防止这些情况与if条件,你应该更喜欢这个。如果您是性能优化的狂热者,您可能已经知道,抛出和捕获异常可能比测试条件更昂贵。

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

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

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

使用代码契约代替。特别是对于像先决条件这样的东西(即您的示例)。

如果预期会出现错误,则使用返回代码或类似的代码。比如一个不存在的文件或者

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

异常处理是昂贵的,所以明智地使用。

hth

马里奥

首先,在第二段代码中您没有抛出任何异常,您只是向控制台写入一条消息。这意味着第二个信号不会在windows窗体或wpf应用程序中发出任何信号,或者更糟的是,在web应用程序中。此外,通过抛出异常,您可以在应用程序的另一个阶段拦截它,并做出相应的行为。WriteLine只特定于调用它的作用域。

您可能还需要考虑抛出异常是否合适。这种情况发生在代码可以温和地处理"异常"情况的所有情况下,例如通过提供默认值等。