CA1865-CA1867: Använd 'sträng.Metod(char)' i stället för 'sträng.Metod(string)' för en sträng med enstaka tecken

Egenskap Värde
Regel-ID CA1865-CA1867
Title Använd 'sträng.Metod(char)' istället för 'sträng.Metod(string)' för strängar med ett enda tecken.
Kategori Prestanda
Korrigeringen är antingen invasiv eller icke-invasiv Oumbrytbar
Aktiverad som standard i .NET 10 CA1865 – Som förslag
CA1866 – Som förslag
CA1867 – Nej
Tillämpliga språk C# och Visual Basic

Orsak

string.Method(string) används när string.Method(char) var tillgänglig.

Målmetoderna på string för dessa regler:

  • StartsWith
  • EndsWith
  • IndexOf
  • LastIndexOf

I följande tabell sammanfattas villkoren för var och en av de relaterade regel-ID:erna.

Diagnostik-ID beskrivning Tillgänglig kodkorrigering?
CA1865 Gäller när en säker transformering kan utföras automatiskt med en kodkorrigering. Ja
CA1866 Gäller när det inte finns någon angiven jämförelse. Nej
CA1867 Gäller för andra strängjämförelser som inte omfattas av de andra två reglerna. Nej

CA1867 är inaktiverat som standard.

Regelbeskrivning

Överlagringen som tar en teckenparameter presterar bättre än den överlagring som tar en strängparameter.

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

Om du vill åtgärda en överträdelse använder du överlagringen av teckenparametern i stället för överlagringen av strängparametern.

Ta följande som exempel:

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

Den här koden kan ändras så att 'I' skickas till StartsWith istället för strängen "I".

public bool StartsWithLetterI()
{
    var testString = "I am a test string.";
    return testString.StartsWith('I');
}
Public Function StartsWithLetterI() As Boolean
    Dim testString As String = "I am a test string."
    Return testString.StartsWith("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 att anropa metoden med en sträng.

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 CA1865 // or CA1866 or CA1867
// The code that's violating the rule is on this line.
#pragma warning restore CA1865 // or CA1866 or CA1867

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.CA1865.severity = none
dotnet_diagnostic.CA1866.severity = none
dotnet_diagnostic.CA1867.severity = none

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

Se även