Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Ö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 10'da 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>.ContainsKey(TKey) Hem hem de Dictionary<TKey,TValue>.Add 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.