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 9 | 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.