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 | CA1868 |
| Başlık | Kümeler için gereksiz Contains çağrısı |
| 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
ISet<T>.Add veya ICollection<T>.Remove çağrısı, Contains tarafından yapılan bir çağrı ile korunur. Veya bir IImmutableSet<T>.Add veya IImmutableSet<T>.Remove çağrısı, IImmutableSet<T>.Contains tarafından korunur.
Kural açıklaması
ISet<T>.Add(T) de ICollection<T>.Remove(T) de bir arama gerçekleştirir, bu nedenle ICollection<T>.Contains(T) önceden çağrılmasına gerek yoktur. Doğrudan Add(T) veya Remove(T) çağırmak, öğenin eklenip kaldırılmadığını gösteren bir Boole değeri döndürdüğü için daha verimlidir.
Bu mantık IImmutableSet<T>.Add(T) ve IImmutableSet<T>.Remove(T) için de geçerlidir; öğe eklenmesi veya kaldırılması durumunda yeni bir küme döndürürler, ancak değişiklik yoksa özgün kümeyi döndürürler.
İhlalleri düzeltme
ICollection<T>.Contains(T) veya IImmutableSet<T>.Contains(T) çağrısının ardından gelen ISet<T>.Add(T), ICollection<T>.Remove(T), IImmutableSet<T>.Add(T) veya IImmutableSet<T>.Remove(T) çağrısını, yalnızca ikinci yönteme 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 noneolarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1868.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.