Heim >Backend-Entwicklung >C++ >Wie gehe ich mit CA2202-Warnungen um, wenn mehrere Objekte in C# entsorgt werden?
Behebung von CA2202-Warnungen beim Verwerfen mehrerer Objekte in C#
Das folgende C#-Codebeispiel generiert CA2202-Warnungen in Visual Studio Code Analysis für CryptoStream
und MemoryStream
aufgrund möglicher wiederholter Dispose
-Aufrufe. Anstelle einer Codeänderung ist die Unterdrückung dieser Warnungen der empfohlene Ansatz.
CA2202-Warnungen unterdrücken: Die bevorzugte Lösung
Angesichts des konsistenten Objektentsorgungsmusters im Code ist die Unterdrückung der Warnungen einer Änderung des Codes vorzuziehen. Die Besorgnis über mehrere Dispose
-Aufrufe ist unbegründet, da die IDisposable.Dispose
-Methode idempotent konzipiert ist (nachfolgende Aufrufe nach dem ersten werden ignoriert). Die using
-Anweisung handhabt dies elegant.
So unterdrücken Sie die Warnungen:
<code class="language-csharp">[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times")] public static byte[] Encrypt(string data, byte[] key, byte[] iv) { using (var memoryStream = new MemoryStream()) { using (var cryptograph = new DESCryptoServiceProvider()) using (var cryptoStream = new CryptoStream(memoryStream, cryptograph.CreateEncryptor(key, iv), CryptoStreamMode.Write)) using (var streamWriter = new StreamWriter(cryptoStream)) { streamWriter.Write(data); } return memoryStream.ToArray(); } }</code>
Begründung für die Unterdrückung
In der Methodendokumentation IDisposable.Dispose
heißt es ausdrücklich, dass Aufrufe, die über den ersten hinausgehen, ignoriert werden. Die verschachtelten using
-Anweisungen im Code erzeugen ein Szenario, in dem mehrere Objekte die Entsorgung verwalten, dies jedoch vom Framework korrekt gehandhabt wird. Daher ist die CA2202-Warnung unnötig und kann sicher unterdrückt werden.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit CA2202-Warnungen um, wenn mehrere Objekte in C# entsorgt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!