C# 什么';这是无法处理的异常的定义/示例(框架异常之外)?

C# 什么';这是无法处理的异常的定义/示例(框架异常之外)?,c#,exception,exception-handling,C#,Exception,Exception Handling,正如人们所说,只有在能够处理异常的情况下才应该捕获异常,那么不能处理异常的例子是什么(除了OOM、BadImageFormat等之外) 我的印象是,记录的异常是已处理的异常,还是处理意味着执行某种纠正措施(例如,如果网络共享关闭,请尝试备份共享或装载另一个共享,等等) 非常感谢能够和不能处理的异常示例 感谢您,除了CLR无法捕获的关键框架异常(StackOverflow、OutOfMemory等),还有一些异常通常不应该被捕获,因为它们代表了开发人员的错误,应该在开发过程中加以解决。虽然记录异常

正如人们所说,只有在能够处理异常的情况下才应该捕获异常,那么不能处理异常的例子是什么(除了OOM、BadImageFormat等之外)

我的印象是,记录的异常是已处理的异常,还是处理意味着执行某种纠正措施(例如,如果网络共享关闭,请尝试备份共享或装载另一个共享,等等)

非常感谢能够和不能处理的异常示例


感谢您,除了CLR无法捕获的关键框架异常(StackOverflow、OutOfMemory等),还有一些异常通常不应该被捕获,因为它们代表了开发人员的错误,应该在开发过程中加以解决。虽然记录异常可以看作是“处理”异常的一种机制,但它只有在检查日志文件是否有错误时才有用

一般来说,开发人员不应明确捕获ArgumentNullException、ArgumentException、NullReferenceException等异常,而应允许这些异常冒泡,以便识别和修复它们。

处理(对我而言)意味着采取适当的措施来恢复应用程序的流程。如果重新显示异常,则表示尚未处理它。日志记录是一种可能重新引发异常的情况

可以处理的异常示例:您正在运行一个服务,该服务将事件通知特定用户。您尝试使用web服务发送SMS消息,这会产生一个异常(服务器关闭、帐户关闭等),因此作为回退,您会发送一封电子邮件消息,但由于另一个异常而失败,因此您会回退到尝试进行语音呼叫。这会成功,您的客户会得到他想知道的任何事情的通知

有时可以处理而有时不能处理的异常的一个例子是:系统内存不足异常。有时,您知道您对某个较大但非关键的对象有一个锁,您可以释放该锁,然后重试,但通常您有活动引用的所有对象都是必须拥有的,在这种情况下,您无法真正执行恢复操作


请注意,处理通常意味着对于被要求执行某项操作并返回成功/失败的函数,仅返回false。这并不像最初出现的那样无用,请考虑这个场景:您对文件进行更改,然后告诉应用程序保存更改。由于某种原因,磁盘已满或不可用。两者都会导致异常。保存时,您有isDirty=savefile(),异常发生在savefile内部,并由savefile通过将结果设置为false来“处理”。这允许应用程序知道(并向用户显示)文件尚未保存。

是否存在可以处理DirectoryDoesNotExist等正常异常的情况,以及是否存在由相同代码或不同代码引发的相同异常类型可能不处于待处理状态的其他情况?例如,处理异常可能涉及尝试备份驱动器,但如果备份驱动器不存在,则异常可能未处于要处理的状态。@dotnetdev:当然。您的示例是一个很好的示例,说明了为什么您可能无法处理异常。如果您为处理异常而采取的操作无法完成(要么抛出自己的异常,要么以某种方式返回false),那么您要么重新引发异常,要么创建自己的异常,以报告存在异常且替代方案不成功。因此,这基本上是纠正操作,不仅仅是为了帮助调试问题的人员而进行日志记录,这样应用程序就可以继续运行。教训是要始终确保有选择(如果有一件事失败,就有一个备份计划)。@dotnetdev:广义上讲。有两件事你不想做。首先,您不希望应用程序崩溃和烧坏(蓝屏,应用程序没有处理异常,等等),其次,您不希望这导致下游出现错误结果。有时候你会想尝试一个备份计划,有时候你会想放弃你正在尝试的,有时候你可以继续,因为不成功是可以接受的。记录异常在很大程度上是开发人员的额外利益,而不是用户的利益。