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

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

Причина

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

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

  • StartsWith
  • EndsWith
  • IndexOf
  • LastIndexOf

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

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

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

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

См. также