C# 异常处理-正确的方法是什么?

C# 异常处理-正确的方法是什么?,c#,exception-handling,C#,Exception Handling,我使用异常处理已经有一段时间了,并且安装了Resharper,现在收到各种各样的消息,说我应该也应该这样做。无论如何,它说我不应该在代码中使用try-and-catch块。那么我应该把它们放在哪里去捕捉异常呢?我见过有人在寻找某些异常,比如找不到文件,但是其他唯一的错误或异常呢 下面是它抱怨的一些异常处理的示例: try { var rnd = new Random(); var buffer = new byte[sizeof(UInt64)]; rnd.NextByt

我使用异常处理已经有一段时间了,并且安装了Resharper,现在收到各种各样的消息,说我应该也应该这样做。无论如何,它说我不应该在代码中使用try-and-catch块。那么我应该把它们放在哪里去捕捉异常呢?我见过有人在寻找某些异常,比如找不到文件,但是其他唯一的错误或异常呢

下面是它抱怨的一些异常处理的示例:

try
{
    var rnd = new Random();
    var buffer = new byte[sizeof(UInt64)];
    rnd.NextBytes(buffer);
}
catch (Exception)
{
    throw;
}

是否有人提供了有关异常处理最佳实践的链接,以使re sharper更满意?

只捕获您可以处理的异常,例如插入重复的主键,以便向用户显示输入不同值的消息


对于其他例外,让它们在您的库中冒泡,并在一个地方处理它们。就像其他人已经指出的ASP.Net中的Application_Error event(应用程序错误事件)

一样,只有在您确实计划对catch块内的异常执行某些操作时,才使用try/catch-这样做时请记住,实际上无法保证catch块将实际执行(例如,电源故障)

请看当我问一个非常类似的问题时给我的解释:


如果您只想诊断/记录异常,而不想对其执行任何特定操作,则可以使用全局异常处理程序,即-通过这种方式,您可以集中处理。

您可以将它们放入以捕获可以处理的异常。你没有对这里的任何例外做任何事;你只是抓住它,什么也不做,然后再扔。如果你什么都不做,那么这个例外已经是调用方的问题了;您不需要实际编写运行时将自动执行的代码。此外,在编写更多异常处理代码之前,请阅读以下内容:这个问题虽然不适合这样做,但有很多好的建议:@EricLippert我想就您的评论+10,特别是第一个。