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