Avertissement CA2202 : traitement multiple d'un objet jetable
L'avertissement CA2202 est déclenché lorsqu'un outil d'analyse de code détecte qu'un objet est supprimé plusieurs fois dans la même méthode. Cela peut entraîner des problèmes potentiels tels que des exceptions de référence nulle.
Dans le code fourni :
<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>
Il existe plusieurs cas de déclenchement de cet avertissement. Lorsque vous utilisez using
, MemoryStream
, DESCryptoServiceProvider
et CryptoStream
dans un bloc StreamWriter
, les outils d'analyse de code identifieront qu'ils sont traités plusieurs fois à la ligne 34. Pour résoudre ce problème, nous pouvons supprimer l’avertissement dans ce cas.
La raison de la suppression de cet avertissement est que le code gère les objets jetables de manière cohérente. D'autres classes peuvent posséder l'objet jetable créé et faire appel à Dispose
également. Dans ce cas, il n’y a pas lieu de s’inquiéter de plusieurs cessions. Cet avertissement peut être ignoré en appliquant l'attribut [SuppressMessage]
à la méthode :
<code class="language-csharp">[SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times")] public static byte[] Encrypt(string data, byte[] key, byte[] iv) { // 代码保持不变 }</code>
Alternativement, on pourrait faire valoir que la règle CA2202 est inutile, puisque IDisposable.Dispose
la documentation indique explicitement que les objets doivent ignorer les appels de suppression ultérieurs. Par conséquent, il peut être approprié de supprimer cet avertissement pour l’ensemble du projet. Cependant, une attention particulière doit être apportée pour garantir que le code ne repose pas sur une implémentation défectueuse de Dispose
, qui peut être détectée à l'aide de l'avertissement CA1065.
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!