ホームページ > バックエンド開発 > C++ > CA2202 警告: C# での使い捨てアイテムの複数の破棄に対処する方法?

CA2202 警告: C# での使い捨てアイテムの複数の破棄に対処する方法?

Barbara Streisand
リリース: 2025-01-23 11:16:11
オリジナル
285 人が閲覧しました

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

CA2202 警告: 使い捨てオブジェクトの複数の処理

CA2202 警告は、オブジェクトが同じメソッド内で複数回破棄されたことをコード分析ツールが検出したときにトリガーされます。これにより、null 参照例外などの潜在的な問題が発生する可能性があります。

提供されたコード内:

<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>
ログイン後にコピー

この警告がトリガーされるインスタンスは複数あります。 using ブロック内で MemoryStreamDESCryptoServiceProviderCryptoStream、および StreamWriter を使用すると、コード分析ツールは、それらが 34 行目で複数回処理されることを識別します。この問題を解決するには、この場合の警告を抑制します。

この警告を抑制する理由は、コードが使い捨てオブジェクトを一貫して処理するためです。他のクラスは、作成された使い捨てオブジェクトを所有し、それに対して Dispose を呼び出すこともできます。この場合、複数の廃棄を心配する必要はありません。この警告は、[SuppressMessage] 属性をメソッドに適用することで無視できます:

<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>
ログイン後にコピー

あるいは、IDisposable.Dispose オブジェクトは後続の破棄呼び出しを無視する必要があるとドキュメントに明示的に記載されているため、CA2202 ルールは不要であると主張することもできます。したがって、プロジェクト全体に対してこの警告を抑制することが適切な場合があります。ただし、コードが Dispose の欠陥のある実装に依存しないように注意する必要があります。これは CA1065 警告を使用して検出できます。

以上がCA2202 警告: C# での使い捨てアイテムの複数の破棄に対処する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート