2016-03-25 7 views
7

ich IDisposable bin Umsetzung, und in meiner Dispose() Methode, wenn Dispose() auf anderen verwalteten Ressourcen aufruft ich bin mit dem ?. Operator wie folgt:CA2213 Warnung bei Verwendung?. (Null-bedingter Operator) zu nennen Entsorgen

public void Dispose() 
    { 
     Dispose(true); 
     GC.SuppressFinalize(this); 
    } 

    protected virtual void Dispose(bool disposing) 
    { 
     if(disposing) 
     { 
      _ChangeLock?.Dispose(); 
     } 
    } 

Ich bin immer noch

CA2213: die folgenden code analysis error bekommen 'MyClass' enthält Feld 'MyClass._ChangeLock', die von IDisposable Typ ist: 'ReaderWriterLockSlim'. Ändern Sie die Dispose-Methode für MyClass, um in diesem Feld Dispose oder Close aufzurufen.

Wenn ich auf eine Standard-Nullprüfung zu ändern, geht die Code-Analyse-Warnung weg:

if(_ChangeLock != null) 
    _ChangeLock.Dispose(); 

Gibt es etwas falsch mit dem Null-bedingten Operator der Art, wie ich bin, oder ist diese Code-Analyse Regel veraltet, oder was?

+0

Es ist die CA-Regel, die aktualisiert werden muss. – Corey

Antwort

10

Dies ist ein known issue mit FxCop.

Es scheint, sie haben decided not to fix it:

Wir entschieden uns zu schneiden [CA2213], weil es sehr schwer ist, es richtig zu machen, ohne tiefere Analyse, Variablen zu verfolgen und gegebenenfalls mit Anmerkungen. Die aktuelle Implementierung ist sehr verrauscht und hat viele Fehlalarme und der Wert der Regel ist nicht das ganze Rauschen wert, das erzeugt wird.

+0

Ausgezeichnete Antwort, danke! – StuartMorgan

+0

Das ist aber eine Schande, da ich finde, dass die Regel für viele Fälle nützlich ist. Scheint wie Overkill, wenn es einen ziemlich einfachen Workaround gibt oder einfach vom Benutzer unterdrückt werden kann. – StuartMorgan