CA1864: 'IDictionary.TryAdd(TKey, TValue)' yöntemini tercih edin
Özellik | Değer |
---|---|
Kural Kimliği | CA1864 |
Başlık | 'IDictionary.TryAdd(TKey, TValue)' yöntemini tercih edin |
Kategori | Performans |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 8'de varsayılan olarak etkin | Öneri olarak |
Neden
Dictionary<TKey,TValue>.Add bir Dictionary<TKey,TValue>.ContainsKey(TKey) çağrı tarafından korunur.
Kural açıklaması
Dictionary<TKey,TValue>.Add Hem hem de Dictionary<TKey,TValue>.ContainsKey(TKey) yedekli bir arama gerçekleştirin. Dictionary<TKey,TValue>.Add ayrıca anahtar sözlükte zaten varsa bir özel durum oluşturur. Değerinin eklenip eklenmediğini belirten bir Boole değeri döndüren çağrısı Dictionary<TKey,TValue>.TryAdddaha verimlidir. TryAdd
anahtar zaten varsa anahtarın değerinin üzerine yazmaz.
İhlalleri düzeltme
çağrısının Dictionary<TKey,TValue>.ContainsKey(TKey) ardından gelen çağrıyı Dictionary<TKey,TValue>.Add tek bir çağrısıyla Dictionary<TKey,TValue>.TryAdddeğiştirin.
Örnek
Aşağıdaki kod parçacığı CA1864 ihlalini gösterir:
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
Aşağıdaki kod parçacığı ihlali düzeltir:
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
Uyarıların ne zaman bastırılması gerekiyor?
Performans sorun değilse ve tarafından Dictionary<TKey,TValue>.Addoluşturulabilecek özel durumu işlerseniz bu uyarıyı gizlemeniz güvenlidir.
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA1864
// The code that's violating the rule is on this line.
#pragma warning restore CA1864
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini none
olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1864.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin