我认为抛出异常是一种好习惯,它可以使气泡回升到UI或您记录异常并通知用户的地方。

为什么reshaper说这是多余的?

try
{
    File.Open("FileNotFound.txt", FileMode.Open);
}
catch
{
    throw;
}

最佳答案

因为

try {
    File.Open("FileNotFound.txt", FileMode.Open);
} catch {
    throw;
}

没有什么不同
File.Open("FileNotFound.txt", FileMode.Open);

如果对File.Open(string, FileMode)的调用失败,则在任一示例中,完全相同的异常将一直存在到UI中。

在上面的catch子句中,您只是在捕获并重新抛出异常,而无需执行其他任何操作,例如记录日志,回滚事务,包装异常以向其添加其他信息或所有其他操作。

然而,
try {
    File.Open("FileNotFound.txt", FileMode.Open);
} catch(Exception ex) {
    GetLogger().LogException(ex);
    throw;
}

不会包含任何冗余,ReSharper不应抱怨。同样
try {
    File.Open("FileNotFound.txt", FileMode.Open);
} catch(Exception ex) {
    throw new MyApplicationException(
        "I'm sorry, but your preferences file could not be found.", ex);
}

不会是多余的。

关于exception-handling - 为什么resharper说 'Catch clause with single '抛出“语句是多余的”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1019237/

10-13 02:59