次の方法で共有


CA1853: 'Dictionary.ContainsKey(key)' の不要な呼び出し

プロパティ
ルール ID CA1853
Title 'Dictionary.ContainsKey(key)' の不要な呼び出し
[カテゴリ] パフォーマンス
修正が破壊的か非破壊的か なし
導入されたバージョン .NET 7
.NET 10 で既定で有効 一つの提案として
該当する言語 C# と Visual Basic

原因

Dictionary<TKey,TValue>.Remove(TKey) への呼び出しは、Dictionary<TKey,TValue>.ContainsKey(TKey) への呼び出しで保護されます。

規則の説明

Dictionary.Remove(key)Dictionary.ContainsKey(key) を保護する必要はありません。 Dictionary<TKey,TValue>.Remove(TKey) は、キーが存在するかどうかをすでに確認しており、存在しない場合は例外をスローしません。

違反の修正方法

Dictionary<TKey,TValue>.ContainsKey(TKey) を呼び出す保護コードを削除してください。

次のコード スニペットは CA1853 の違反を示しています。

Dictionary<string, int> d = new();
if (d.ContainsKey("name"))
    d.Remove("name");
Class C
    Shared Sub S()
        Dim d As New Dictionary(Of String, Integer)
        If d.ContainsKey("name") Then
            d.Remove("name")
        End If
    End Sub
End Class

次のコード スニペットでは違反を修正しています。

Dictionary<string, int> d = new();
d.Remove("name");
Class C
    Shared Sub S()
        Dim d As New Dictionary(Of String, Integer)
        d.Remove("name")
    End Sub
End Class

どのようなときに警告を抑制するか

パフォーマンスが問題でない場合は、警告を抑制しても問題ありません。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable CA1853
// The code that's violating the rule is on this line.
#pragma warning restore CA1853

ファイル、フォルダー、またはプロジェクトの規則を無効にするには、その重要度を none に設定し、設定ファイル で適用します。

[*.{cs,vb}]
dotnet_diagnostic.CA1853.severity = none

詳細については、「コード分析の警告を抑制する方法」を参照してください。