CA2202-Warnung für Einweggegenstände unterdrücken
Das Code-Analysetool CA2202 kennzeichnet mögliche Probleme, die dazu führen, dass Objekte mehrfach entsorgt werden, was möglicherweise zu ObjectDisposedException
Fehlern führt. Diese Warnung tritt normalerweise auf, wenn verschachtelte Einwegobjekte verwendet werden, wie im folgenden Code gezeigt:
<code class="language-csharp">public static byte[] Encrypt(string data, byte[] key, byte[] iv) { using (MemoryStream memoryStream = new MemoryStream()) { using (DESCryptoServiceProvider cryptograph = new DESCryptoServiceProvider()) { using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptograph.CreateEncryptor(key, iv), CryptoStreamMode.Write)) { using (StreamWriter streamWriter = new StreamWriter(cryptoStream)) { streamWriter.Write(data); } } } return memoryStream.ToArray(); } }</code>
In diesem Fall warnt CA2202, dass memoryStream
und cryptoStream
mehrfach verarbeitet werden. Um diese Warnungen zu beheben, können Sie sie optional unterdrücken, wie in der bereitgestellten Lösung gezeigt:
<code class="language-csharp">[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>
Unterdrückung bietet eine Möglichkeit zu bestätigen, dass Warnungen im Kontext eines bestimmten Codes als unwichtig oder falsch erachtet werden. Es ist jedoch wichtig zu beachten, dass der Code technisch gesehen immer noch mehrere Entsorgungen erfordert, was zu Problemen führen kann, wenn die Implementierung des entfernbaren Objekts fehlschlägt.
Zusätzlich zur Unterdrückung besteht ein weiterer Ansatz darin, den Code umzugestalten, um die zusätzliche Entsorgung zu eliminieren und sicherzustellen, dass jedes Objekt nur einmal entsorgt wird:
<code class="language-csharp">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>
Dadurch wird die Warnung eliminiert, ohne das erwartete Verhalten zu beeinträchtigen oder mögliche Ausnahmen einzuführen. Der bevorzugte Ansatz hängt jedoch letztendlich von den spezifischen Anforderungen und dem Kontext Ihrer Codebasis ab.
Das obige ist der detaillierte Inhalt vonWie kann man CA2202-Warnungen effektiv behandeln, wenn mehrere Objekte in C# entsorgt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!