繁体   English   中英

异常处理

[英]Exceptions handle

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

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。 Exceptions 用于处理异常情况。 如果您可以使用if条件防止这些情况,您应该更喜欢这种情况。 如果您是一些性能优化狂,您可能已经知道与测试条件相比,抛出和捕获异常可能更昂贵。

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

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

改用代码合同 特别是对于先决条件(即您的示例)之类的事情。

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

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

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

hth

马里奥

好吧,首先在第二个代码中你不会抛出任何异常,你只需向控制台写入一条消息。 这意味着第二个不会在 windows forms 或 wpf 应用程序或更糟糕的 Z2567A5EC9705EB7ACDZ 应用程序中发出任何信号。 除此之外,通过抛出异常,您可以在应用程序的另一个阶段拦截它,并采取相应的行为,而 Console.WriteLine 仅特定于您调用它的 scope。

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

我不能肯定地说,因为您的程序的 rest 不存在; 但我猜第一个选项会杀死你的程序,而第二个选项只是在控制台上打印一些东西,然后继续你的程序的 rest。 所以这个问题的答案更多地取决于想要它做什么? 当这种情况发生时,想要程序死掉吗? 抛出异常并且不处理它。 想要在发生这种情况时重新提示用户? 然后使用您的第二个选项,但将您的 IF 语句变成一个 while 循环,并一直提示直到条件不再为真。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM