CA1854: Lebih suka IDictionary.TryGetValue(TKey, out TValue) metode

Properti Nilai
ID Aturan CA1854
Judul Metode IDictionary.TryGetValue(TKey, out TValue) lebih disukai
Kategori Performa
Perbaikan bersifat merusak atau tidak merusak Tidak terputus
Diaktifkan secara default di .NET 10 Sebagai saran
Bahasa yang berlaku C# dan Visual Basic

Penyebab

Akses elemen IDictionary yang diawasi oleh pemeriksaan IDictionary.ContainsKey.

Deskripsi aturan

Ketika elemen IDictionary diakses, implementasi pengindeks memeriksa nilai null dengan memanggil metode IDictionary.ContainsKey. Jika Anda juga memanggil IDictionary.ContainsKey dalam if klausul untuk menjaga pencarian nilai, dua pencarian dilakukan saat hanya satu yang diperlukan.

Cara memperbaiki pelanggaran

Ganti pemanggilan dan akses elemen IDictionary.ContainsKey dengan memanggil metode IDictionary.TryGetValue.

Pelanggaran:

public string? GetValue(string key)
{
    if (_dictionary.ContainsKey(key))
    {
        return _dictionary[key];
    }

    return null;
}
Public Function GetValue(key As String) As String
    If _dictionary.ContainsKey(key) Then
        Return _dictionary(key)
    End If

    Return Nothing
End Function

Perbaikan:

public string? GetValue(string key)
{
    if (_dictionary.TryGetValue(key, out string? value))
    {
        return value;
    }

    return null;
}
Public Function GetValue(key As String) As String
    Dim value as String

    If _dictionary.TryGetValue(key, value) Then
        Return value
    End If

    Return Nothing
End Function

Kapan harus menekan peringatan

Aman untuk menekan peringatan ini jika Anda menggunakan implementasi IDictionary kustom yang menghindari pencarian nilai saat melakukan IDictionary.ContainsKey pemeriksaan.

Menyembunyikan peringatan

Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.

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

Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.

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

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.