因此此代码会触发CA1031
。
try
{
// logic
}
catch (FileNotFoundException) // exception type
{
// handle error
}
虽然这个没有:
try
{
// logic
}
catch (FileNotFoundException ex) // exception var
{
// handle error
}
因为异常类型是有意义的,所以我不需要第一个示例中的 ex
。但它不是一般的异常类型。它不是 IOException 或 Exception。那么为什么它仍然会触发CA1031
?
除了我不捕获异常信息之外,catch(FileNotFoundException)
和 catch(FileNotFoundException ex)
之间还有区别吗?
最佳答案
So this code triggers CA1031
try
{
// logic
}
catch (FileNotFoundException) // exception type
{
// handle error
}
发生这种情况是因为“一般异常(例如 System.Exception
”或 System.SystemException
)在 catch 语句中被捕获,或者一般 catch 子句(例如 catch())用来”。要修复它,请分配它并处理错误,或者重新抛出一般异常以便进一步处理。
经过进一步调查,这似乎曾经是一个错误,您可以查看更多here ;这是 FxCop
的 Roslyn
问题。
修复: 只需更新最新的 FxCop 分析器包即可。
NuGet:
Install-Package Microsoft.CodeAnalysis.FxCopAnalyzers -Version 2.9.7
引用文献: CA1031
关于C# catch(FileNotFoundException) 和 CA1031,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58648645/