Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| 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.