Bagikan melalui


CA1864: Lebih suka metode 'IDictionary.TryAdd(TKey, TValue)'

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

Penyebab

Dictionary<TKey,TValue>.Add dijaga oleh Dictionary<TKey,TValue>.ContainsKey(TKey) panggilan.

Deskripsi aturan

Baik Dictionary<TKey,TValue>.ContainsKey(TKey) dan Dictionary<TKey,TValue>.Add lakukan pencarian, yang berlebihan. Dictionary<TKey,TValue>.Add juga melemparkan pengecualian jika kunci sudah ada di kamus. Lebih efisien untuk memanggil Dictionary<TKey,TValue>.TryAdd, yang mengembalikan nilai Boolean yang menunjukkan apakah nilai ditambahkan atau tidak. TryAdd tidak menimpa nilai kunci jika kunci sudah ada.

Cara memperbaiki pelanggaran

Ganti panggilan ke Dictionary<TKey,TValue>.ContainsKey(TKey) yang diikuti dengan panggilan ke Dictionary<TKey,TValue>.Add dengan satu panggilan ke Dictionary<TKey,TValue>.TryAdd.

Contoh

Cuplikan kode berikut menunjukkan pelanggaran CA1864:

void Run(IDictionary<int, string> dictionary)
{
    if(!dictionary.ContainsKey(2)) {
        dictionary.Add(2, "Hello World");
    }
}
Sub Run(dictionary As IDictionary(Of Integer, String))
    If Not dictionary.ContainsKey(2) Then
        dictionary.Add(2, "Hello World")
    End If
End Sub

Cuplikan kode berikut memperbaiki pelanggaran:

void Run(IDictionary<int, string> dictionary)
{
    dictionary.TryAdd(2, "Hello World");
}
Sub Run(dictionary As IDictionary(Of Integer, String))
    dictionary.TryAdd(2, "Hello World")
End Sub

Kapan harus menekan peringatan

Aman untuk menekan peringatan ini jika performa tidak menjadi perhatian dan jika Anda menangani pengecualian yang mungkin dilemparkan oleh Dictionary<TKey,TValue>.Add.

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 CA1864
// The code that's violating the rule is on this line.
#pragma warning restore CA1864

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

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

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.