C# 异常处理
当处理异常(例如在我的表示逻辑中的方法中)时,如果此处的唯一目的是提醒用户,是否可以在一个catch块中捕获所有可能的异常,如下所示C# 异常处理,c#,.net,exception-handling,C#,.net,Exception Handling,当处理异常(例如在我的表示逻辑中的方法中)时,如果此处的唯一目的是提醒用户,是否可以在一个catch块中捕获所有可能的异常,如下所示 void Do() { try { // ... } catch (Exception e) { MessageBox.Show(e.message); } } 或者,我们是否应该始终在单独的catch块中捕获每个可能的异常(如OutOfMemoryException,Nul
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”)。
代码中处理的异常不需要传播给用户。这会破坏应用程序的流程和整体体验,因为用户对此无能为力。请考虑使用记录器,而不是开发者可以访问的。
请参见在代码中使用常规异常很好。这是最常用的使用方法。没有标准,只有最佳实践。使用特定异常的一种规则可以是:
无论如何,异常不是一个UI工具,而是一种开发资源。在代码中使用常规异常很好。这是最常用的使用方法。没有标准,只有最佳实践。使用特定异常的一种规则可以是:
无论如何,异常不是一个UI工具,而是一种开发资源。这取决于您的需要。如果您想执行一些特殊操作,或向记录器或用户发送特殊消息以获取某种类型的异常,您应该使用更多的catch块。但如果这不重要,并且在每个catch块中都有相同的代码,则只使用ExceptionIf消息e取决于记录器的ex。对于admin,我们应该显示堆栈跟踪信息,您是否使用If、Else处理它?可能是If、Else,或者将异常发送到某个适当的类,该类根据您的需要解决要显示的内容。如果您要执行某些特殊操作,或者针对某些类型的异常向记录器或用户发送特殊消息,您应该使用更多的catch块。但如果这不重要,并且在每个catch块中都会有相同的代码,则只使用exception如果消息取决于记录器for ex。对于admin,我们应该显示堆栈跟踪信息,您是否使用if,Else?可能是if,Else?处理它,或者将异常发送到某个适当的类,该类解析要显示的内容