CA1865-CA1867: используйте 'string.Method(char)' вместо 'string.Method(string)', если строка содержит только один символ.

Свойство Значение
Идентификатор правила CA1865-CA1867
Заголовок Используйте 'string.Method(char)' вместо 'string.Method(string)' для строки с одним символом
Категория Производительность
Исправление является критическим или не критическим неразрывный
Включен по умолчанию в .NET 10 CA1865 — как предложение
CA1866 — как предложение
CA1867 — нет
Применимые языки C# и Visual Basic

Причина

string.Method(string) используется, когда string.Method(char) был доступен.

Целевые методы string для следующих правил:

  • StartsWith
  • EndsWith
  • IndexOf
  • LastIndexOf

В следующей таблице перечислены условия для каждого из связанных идентификаторов правил.

ИД диагностики Описание Доступно исправление кода?
CA1865 Применяется, когда безопасное преобразование может выполняться автоматически с помощью исправления кода. Да
CA1866 Применяется, если нет указанного сравнения. Нет
CA1867 Применяется для любого другого сравнения строк, не охватываемых двумя другими правилами. Нет

CA1867 по умолчанию отключен.

Описание правила

Перегрузка, принимаюющая параметр char, выполняется лучше, чем перегрузка, принимающую строковый параметр.

Устранение нарушений

Чтобы устранить нарушение, используйте перегрузку параметра char вместо перегрузки строковых параметров.

Рассмотрим следующий пример:

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

Этот код можно изменить, чтобы передавать 'I' в StartsWith вместо строки "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

Когда лучше отключить предупреждения

Отключите нарушение этого правила, если вы не беспокоитесь о влиянии на производительность вызова метода со строкой.

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

#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

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

[*.{cs,vb}]
dotnet_diagnostic.CA1865.severity = none
dotnet_diagnostic.CA1866.severity = none
dotnet_diagnostic.CA1867.severity = none

Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.

См. также