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