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

プロパティ
ルール ID CA1853
Title 'Dictionary.ContainsKey(key)' の不要な呼び出し
[カテゴリ] パフォーマンス
修正が中断ありか中断なしか なし
導入されたバージョン .NET 7
.NET 8 では既定で有効 提案として

原因

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

規則の説明

Dictionary.ContainsKey(key)Dictionary.Remove(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

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