CA1865-CA1867: Use 'string.Method(char)' instead of 'string.Method(string)' for string with single char
Property | Value |
---|---|
Rule ID | CA1865-CA1867 |
Title | Use 'string.Method(char)' instead of 'string.Method(string)' for string with single char |
Category | Performance |
Fix is breaking or non-breaking | Non-breaking |
Enabled by default in .NET 9 | CA1865—As suggestion CA1866—As suggestion CA1867—No |
Cause
string.Method(string)
is used when string.Method(char)
was available.
The target methods on string
for these rules:
StartsWith
EndsWith
IndexOf
LastIndexOf
The following table summarizes the conditions for each of the related rule IDs.
Diagnostic ID | Description | Code fix available? |
---|---|---|
CA1865 | Applies when a safe transformation can be performed automatically with a code fix. | Yes |
CA1866 | Applies when there's no specified comparison. | No |
CA1867 | Applies for any other string comparison not covered by the other two rules. | No |
CA1867 is disabled by default.
Rule description
The overload that takes a char parameter performs better than the overload that takes a string parameter.
How to fix violations
To fix a violation, use the char parameter overload instead of the string parameter overload.
Consider the following example:
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
This code can be changed to pass 'I'
to StartsWith
instead of the string "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
When to suppress warnings
Suppress a violation of this rule if you're not concerned about the performance impact of calling the method with a string.
Suppress a warning
If you just want to suppress a single violation, add preprocessor directives to your source file to disable and then re-enable the rule.
#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
To disable the rule for a file, folder, or project, set its severity to none
in the configuration file.
[*.{cs,vb}]
dotnet_diagnostic.CA1865.severity = none
dotnet_diagnostic.CA1866.severity = none
dotnet_diagnostic.CA1867.severity = none
For more information, see How to suppress code analysis warnings.