Megosztás a következőn keresztül:


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.