Bagikan melalui


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

Properti Nilai
ID Aturan CA1854
Judul IDictionary.TryGetValue(TKey, out TValue) Lebih suka metode
Golongan Performa
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 Sebagai saran

Penyebab

Akses IDictionary elemen yang dijaga oleh IDictionary.ContainsKey pemeriksaan.

Deskripsi aturan

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

Cara memperbaiki pelanggaran

IDictionary.ContainsKey Ganti pemanggilan dan akses elemen dengan panggilan ke IDictionary.TryGetValue metode .

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.