Aracılığıyla paylaş


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 noneolarak ayarlayın.

[*.{cs,vb}]
dotnet_diagnostic.CA1864.severity = none

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.