【问题标题】:CA2000 : Microsoft.Reliability object is not disposed along all exception pathsCA2000:Microsoft.Reliability 对象未沿所有异常路径进行处理
【发布时间】:2023-06-18 20:39:02
【问题描述】:

我在以下方法中遇到代码分析错误。

    public static OracleCommand CreateStoredProcedureCommand(string name,
                                                             OracleConnection connection)
    {
        return new OracleCommand(name, connection) { CommandType = CommandType.StoredProcedure };
    }

CA2000:Microsoft.Reliability:方法中 'StoredProcedureHelper.CreateStoredProcedureCommand(字符串, OracleConnection)', 对象'command' 并没有被处理 异常路径。在对象“命令”上调用 System.IDisposable.Dispose 在所有对它的引用都超出范围之前

如何在不抑制的情况下解决这个问题?

【问题讨论】:

    标签: c# visual-studio-2010 fxcop


    【解决方案1】:

    当对属性的赋值引发异常时,对象未被释放。试试这个:

    public static OracleCommand CreateStoredProcedureCommand(string name,
                                                             OracleConnection connection)
    {
        OracleCommand result = new OracleCommand(name, connection);
        try
        {
            result.CommandType = CommandType.StoredProcedure;
            return result;
        }
        catch
        {
            result.Dispose();
            throw;
        }
    }
    

    【讨论】:

      【解决方案2】:

      从方法上看,处理对象的责任不能总是由调用者承担。

      你必须压制它。

      【讨论】:

      • 正如 Henrik 所说,属性设置器有可能抛出异常而使对象未处理。