CA1868: A "Contains" szükségtelen hívása a készletekhez
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA1868 |
Cím | A "Contains" szükségtelen hívása a készletekhez |
Kategória | Teljesítmény |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Javaslatként |
Ok
A ISet<T>.Add hívásokat ICollection<T>.Remove a következő hívás Containsvédi: . Vagy a IImmutableSet<T>.Add hívásokat IImmutableSet<T>.Remove a következő hívás IImmutableSet<T>.Containsvédi: .
Szabály leírása
Mindkettőt ISet<T>.Add(T) , és ICollection<T>.Remove(T) végezzen kereséseket, ami feleslegessé teszi a hívásokat ICollection<T>.Contains(T) előre. Hatékonyabb a hívás vagy Remove(T) a közvetlen hívásAdd(T), amely logikai értéket ad vissza, amely jelzi, hogy az elem hozzáadva vagy eltávolítva lett-e.
Ez a logika a következőre IImmutableSet<T>.Add(T)IImmutableSet<T>.Remove(T)is vonatkozik, azzal a kivétellel, hogy vagy új készletet adnak vissza, ha az elemet hozzáadják vagy eltávolítják, vagy az eredeti készletet, ha nem.
Szabálysértések kijavítása
Cserélje le a (ICollection<T>.Contains(T)vagy IImmutableSet<T>.Contains(T)) hívását, amelyet egy vagy ICollection<T>.Remove(T) (vagy IImmutableSet<T>.Remove(T)IImmutableSet<T>.Add(T) ) hívás ISet<T>.Add(T) követ az utóbbi metódus egyetlen hívásával.
Példa
A következő kódrészlet a CA1868 megsértését mutatja be:
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 következő kódrészlet kijavítja a szabálysértést:
void Run(ISet<string> set)
{
set.Add("Hello World");
}
Sub Run(set As ISet(Of String))
set.Add("Hello World")
End Sub
Mikor kell letiltani a figyelmeztetéseket?
Ha a teljesítmény nem okoz problémát, nyugodtan el lehet tiltani ezt a figyelmeztetést.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA1868
// The code that's violating the rule is on this line.
#pragma warning restore CA1868
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none
a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA1868.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.