C# 我可以在dispose方法中使用非disposing代码吗?

C# 我可以在dispose方法中使用非disposing代码吗?,c#,dispose,idisposable,C#,Dispose,Idisposable,我打开了代码分析,并告诉我正确实现Dispose(): Modify 'UnitOfWork.Dispose' so that it calls Dispose(true), then calls GC.SuppressFinalize on the current object instance 它实际上是正确实现的,除了一行额外的代码。请参阅Dispose()中的第一行(回滚事务)。如果我对该行进行注释,CA错误就会消失。如果该行未注释,我将得到错误。不允许我在Dispose()中使用该行

我打开了代码分析,并告诉我正确实现
Dispose()

Modify 'UnitOfWork.Dispose' so that it calls Dispose(true), then calls GC.SuppressFinalize on the current object instance
它实际上是正确实现的,除了一行额外的代码。请参阅
Dispose()
中的第一行(回滚事务)。如果我对该行进行注释,CA错误就会消失。如果该行未注释,我将得到错误。不允许我在
Dispose()
中使用该行吗


清理代码进入重载的
Dispose

 protected virtual void Dispose(bool calledFromDisposeAndNotFromFinalizer)
 {
    if (_disposed) { return; }

    if (calledFromDisposeAndNotFromFinalizer)
    {
        if (!_commitOccurred && _useTransaction) { _transaction.Rollback(); }
        if (_transaction != null) { _transaction.Dispose(); _transaction = null; }
        if (_connection != null) { _connection.Dispose(); _connection = null; }
    }

    _disposed = true;
 }

至少这保证了冗余调用不会重新进入。

将清理代码放在另一个Dispose中,在
if(_disposed){return;}
之后和
if(从disposeAndNotFromFinalizer调用)
内部。问题是它希望您将所有的diposing代码都放在
Dispose(bool)
中,除了这个。是的,这很有效。谢谢,伙计们。有点尴尬,我自己没看到。
 protected virtual void Dispose(bool calledFromDisposeAndNotFromFinalizer)
 {
    if (_disposed) { return; }

    if (calledFromDisposeAndNotFromFinalizer)
    {
        if (!_commitOccurred && _useTransaction) { _transaction.Rollback(); }
        if (_transaction != null) { _transaction.Dispose(); _transaction = null; }
        if (_connection != null) { _connection.Dispose(); _connection = null; }
    }

    _disposed = true;
 }