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

Properti Nilai
ID Aturan CA1864
Judul Lebih suka metode 'IDictionary.TryAdd(TKey, TValue)'
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

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

Deskripsi aturan

Baik Dictionary<TKey,TValue>.ContainsKey(TKey) dan Dictionary<TKey,TValue>.Add melakukan pencarian, yang mubazir. 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

Tidak masalah untuk menekan peringatan ini jika Anda tidak mengkhawatirkan performa 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.