Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异常处理_C#_.net_Exception Handling - Fatal编程技术网

C# 异常处理

C# 异常处理,c#,.net,exception-handling,C#,.net,Exception Handling,当处理异常(例如在我的表示逻辑中的方法中)时,如果此处的唯一目的是提醒用户,是否可以在一个catch块中捕获所有可能的异常,如下所示 void Do() { try { // ... } catch (Exception e) { MessageBox.Show(e.message); } } 或者,我们是否应该始终在单独的catch块中捕获每个可能的异常(如OutOfMemoryException,Nul

当处理异常(例如在我的表示逻辑中的方法中)时,如果此处的唯一目的是提醒用户,是否可以在一个catch块中捕获所有可能的异常,如下所示

void Do()
{
    try
    {
        // ...
    }    
    catch (Exception e)
    {
        MessageBox.Show(e.message);
    }
}
或者,我们是否应该始终在单独的catch块中捕获每个可能的异常(如
OutOfMemoryException
NullReferenceException
等,然后是更一般化的异常)

由于
e.message
中的信息与普通用户无关,我们可以这样做:

MessageBox.Show("Exception occurred and contact system administrator");
这是标准方式吗?那么管理员如何跟踪错误(因为没有显示堆栈跟踪)


注意:我的唯一目的是提醒用户并尝试保持系统正常运行(不崩溃)。

这是一种非常糟糕的做法。如果需要捕获异常,则捕获专门化的异常,然后对其作出反应。您基本上只捕获可以处理的异常,而不是所有可能发生的异常。 好的代码设计也可以帮助防止异常被抛出。例如,您可以使用Null对象模式忽略或显著降低抛出
NullReferenceException
的风险。Try/Do模式在避免null引用异常方面也做得很好

请阅读

向用户显示的错误消息也应该更具体,并提供一些细节,但不要太技术化(例如,您将显示“磁盘空间不足。请释放…”,而不是“MemoryWriteException Recursed”)。 代码中处理的异常不需要传播给用户。这会破坏应用程序的流程和整体体验,因为用户对此无能为力。请考虑使用记录器,而不是开发者可以访问的。
请参见

这是一种非常糟糕的做法。如果需要捕获异常,请捕获专门的异常,然后对其作出反应。基本上,您只捕获可以处理的异常,而不是所有可能发生的异常。 良好的代码设计也有助于防止向您抛出异常。例如,您可以使用Null对象模式忽略或显著降低抛出
NullReferenceException
的风险。Try/Do模式在避免NullReference异常方面也做得很好

请阅读

向用户显示的错误消息也应该更具体,并提供一些细节,但不要太技术化(例如,您将显示“磁盘空间不足。请释放…”,而不是“MemoryWriteException Recursed”)。 代码中处理的异常不需要传播给用户。这会破坏应用程序的流程和整体体验,因为用户对此无能为力。请考虑使用记录器,而不是开发者可以访问的。
请参见

在代码中使用常规异常很好。这是最常用的使用方法。没有标准,只有最佳实践。使用特定异常的一种规则可以是:

  • 管理资源(文件、连接、第三方组件等)
  • 当业务规则被破坏时抛出您自己的异常(为此创建您自己的异常类)
  • 您认为可以引发其他类型异常(线程、异步、服务调用等)的进程
  • 添加异常类型以改进代码和管理流程
  • 通常,代码越复杂,必须使用的try-catch和异常类型就越多。
    无论如何,异常不是一个UI工具,而是一种开发资源。

    在代码中使用常规异常很好。这是最常用的使用方法。没有标准,只有最佳实践。使用特定异常的一种规则可以是:

  • 管理资源(文件、连接、第三方组件等)
  • 当业务规则被破坏时抛出您自己的异常(为此创建您自己的异常类)
  • 您认为可以引发其他类型异常(线程、异步、服务调用等)的进程
  • 添加异常类型以改进代码和管理流程
  • 通常,代码越复杂,必须使用的try-catch和异常类型就越多。
    无论如何,异常不是一个UI工具,而是一种开发资源。

    这取决于您的需要。如果您想执行一些特殊操作,或向记录器或用户发送特殊消息以获取某种类型的异常,您应该使用更多的catch块。但如果这不重要,并且在每个catch块中都有相同的代码,则只使用ExceptionIf消息e取决于记录器的ex。对于admin,我们应该显示堆栈跟踪信息,您是否使用If、Else处理它?可能是If、Else,或者将异常发送到某个适当的类,该类根据您的需要解决要显示的内容。如果您要执行某些特殊操作,或者针对某些类型的异常向记录器或用户发送特殊消息,您应该使用更多的catch块。但如果这不重要,并且在每个catch块中都会有相同的代码,则只使用exception如果消息取决于记录器for ex。对于admin,我们应该显示堆栈跟踪信息,您是否使用if,Else?可能是if,Else?处理它,或者将异常发送到某个适当的类,该类解析要显示的内容