Share via


CA1847: Använd sträng. Innehåller(tecken) i stället för sträng. Innehåller(sträng) med enstaka tecken

Property Värde
Regel-ID CA1847
Title Använd sträng. Innehåller(tecken) i stället för sträng. Innehåller(sträng) med enstaka tecken
Kategori Prestanda
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Som förslag

Orsak

string.Contains(string) används när string.Contains(char) det var tillgängligt.

Regelbeskrivning

När du söker efter ett enda tecken ger användning string.Contains(char) bättre prestanda än string.Contains(string).

Så här åtgärdar du överträdelser

I allmänhet åtgärdas regeln helt enkelt med hjälp av en teckenliteral i stället för en strängliteral.

public bool ContainsLetterI()
{
    var testString = "I am a test string.";
    return testString.Contains("I");
}
Public Function ContainsLetterI() As Boolean
    Dim testString As String = "I am a test string."
    Return testString.Contains("I")
End Function

Den här koden kan ändras så att den använder en teckenliteral i stället.

public bool ContainsLetterI()
{
    var testString = "I am a test string.";
    return testString.Contains('I');
}
Public Function ContainsLetterI() As Boolean
    Dim testString As String = "I am a test string."
    Return testString.Contains("I"c)
End Function

När du ska ignorera varningar

Undertryck en överträdelse av den här regeln om du inte bryr dig om prestandapåverkan av sökanropet i fråga.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

#pragma warning disable CA1847
// The code that's violating the rule is on this line.
#pragma warning restore CA1847

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

[*.{cs,vb}]
dotnet_diagnostic.CA1847.severity = none

Mer information finns i Så här utelämnar du kodanalysvarningar.

Se även