Supprimer l'avertissement CA2202 pour les objets jetables
L'outil d'analyse de code CA2202 signale les problèmes possibles qui entraînent la suppression d'objets à plusieurs reprises, entraînant potentiellement des ObjectDisposedException
erreurs. Cet avertissement se produit généralement lors de l'utilisation d'objets jetables imbriqués, comme indiqué dans le code suivant :
<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>
Dans ce cas, CA2202 avertira que memoryStream
et cryptoStream
sont traités plusieurs fois. Pour résoudre ces avertissements, vous pouvez éventuellement les supprimer, comme indiqué dans la solution fournie :
<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>
La suppression fournit un moyen de confirmer que les avertissements sont jugés sans importance ou incorrects dans le contexte d'un code spécifique. Cependant, il est important de noter que le code implique toujours techniquement plusieurs suppressions, ce qui pourrait poser des problèmes si l'implémentation de l'objet jetable échoue.
En plus de la suppression, une autre approche consiste à refactoriser le code pour éliminer la suppression supplémentaire et garantir que chaque objet n'est supprimé qu'une seule fois :
<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>
Cela élimine l'avertissement sans sacrifier le comportement attendu ni introduire d'exceptions potentielles. Cependant, l’approche privilégiée dépend en fin de compte des exigences spécifiques et du contexte de votre base de code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!