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
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Öneri olarak
Geçerli diller C# ve Visual Basic

Neden

Dictionary<TKey,TValue>.Add bir Dictionary<TKey,TValue>.ContainsKey(TKey) çağrısı ile korunmaktadır.

Kural açıklaması

Dictionary<TKey,TValue>.ContainsKey(TKey) ve Dictionary<TKey,TValue>.Add gereksiz bir arama gerçekleştirir. Dictionary<TKey,TValue>.Add ayrıca anahtar sözlükte zaten varsa bir istisna fırlatır. Dictionary<TKey,TValue>.TryAdd değeri eklenip eklenmediğini belirten bir Boole değeri döndürdüğü için çağrısı daha verimlidir. TryAdd anahtar zaten mevcutsa, anahtarın değerinin üzerine yazmaz.

İhlalleri düzeltme

Bir Dictionary<TKey,TValue>.ContainsKey(TKey) çağrıyı ve onu takip eden Dictionary<TKey,TValue>.Add çağrısını tek bir Dictionary<TKey,TValue>.TryAdd çağrısıyla değ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 bir öncelik değilse ve Dictionary<TKey,TValue>.Add tarafından oluşturulabilecek özel durumu işlerseniz bu uyarıyı bastırmak 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.