CA1868: Kümeler için gereksiz 'İçerir' çağrısı
Özellik | Değer |
---|---|
Kural Kimliği | CA1868 |
Başlık | Kümeler için gereksiz 'contains' çağrısı |
Kategori | Performans |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Öneri olarak |
Neden
ISet<T>.Add Veya ICollection<T>.Remove çağrısı, çağrısı Containstarafından korunur. Veya bir IImmutableSet<T>.Add veya IImmutableSet<T>.Remove çağrısı, çağrısı IImmutableSet<T>.Containstarafından korunur.
Kural açıklaması
ICollection<T>.Remove(T) Hem hem de ISet<T>.Add(T) önceden çağrılmaya ICollection<T>.Contains(T) yedekli hale getiren bir arama gerçekleştirin. Öğenin eklenip eklenmediğini veya kaldırıldığını belirten bir Boole değeri döndüren veya Remove(T) doğrudan çağırmak Add(T) daha verimlidir.
Bu mantık ve için IImmutableSet<T>.Add(T) IImmutableSet<T>.Remove(T)de geçerlidir; öğe eklendiğinde veya kaldırıldığında yeni bir küme döndürmeleri ya da eklenmediyse özgün kümenin döndürülmesi dışında.
İhlalleri düzeltme
veya (veya veya ) çağrısının ICollection<T>.Contains(T) ardından gelen (veya IImmutableSet<T>.Remove(T)IImmutableSet<T>.Contains(T)IImmutableSet<T>.Add(T) ) çağrısını, ikinci yönteme ISet<T>.Add(T) ICollection<T>.Remove(T) yapılan tek bir çağrıyla değiştirin.
Örnek
Aşağıdaki kod parçacığı CA1868 ihlalini gösterir:
void Run(ISet<string> set)
{
if (!set.Contains("Hello World"))
{
set.Add("Hello World");
}
}
Sub Run(set As ISet(Of String))
If Not set.Contains("Hello World") Then
set.Add("Hello World")
End If
End Sub
Aşağıdaki kod parçacığı ihlali düzeltir:
void Run(ISet<string> set)
{
set.Add("Hello World");
}
Sub Run(set As ISet(Of String))
set.Add("Hello World")
End Sub
Uyarıların ne zaman bastırılması gerekiyor?
Performansla ilgili bir sorun yoksa 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 CA1868
// The code that's violating the rule is on this line.
#pragma warning restore CA1868
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.CA1868.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.