C# catch(FileNotFoundException) 和 CA1031

标签 c# code-analysis

因此此代码会触发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 ;这是 FxCopRoslyn 问题。

修复: 只需更新最新的 FxCop 分析器包即可。

NuGet:

 Install-Package Microsoft.CodeAnalysis.FxCopAnalyzers -Version 2.9.7

引用文献: CA1031

关于C# catch(FileNotFoundException) 和 CA1031,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58648645/

相关文章:

azure - 为什么我的构建管道突然失败并出现代码分析错误?

c# - 为什么我的静态方法隐藏了我的实例方法?

javascript - 使用 alert() 的 Sonar 编码规则

java - FindBugs 错误 : Write to static field from instance method

c# - 为什么结构中的引用类型表现得像值类型?

c# - 如何使用 SonarQube 测量类耦合指标

java - 下面的代码分析是什么意思?

c# - 从 SQL Server 数据库更新前端 WPF 应用程序

c# - SerialPort.GetPortNames() 行为

c# - 将线程重用于不同的操作