Maison >développement back-end >C++ >Comment gérer l'avertissement CA2202 : élimination multiple de produits jetables en C# ?

Comment gérer l'avertissement CA2202 : élimination multiple de produits jetables en C# ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-23 11:16:11279parcourir

How to Handle the CA2202 Warning: Multiple Disposal of Disposables in C#?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn