Поделиться через


CA1858: используйте StartsWith вместо IndexOf

Свойство Значение
Идентификатор правила CA1858
Заголовок Использование StartsWith вместо IndexOf
Категория Производительность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 9 Как предложение

Причина

String.IndexOf вызывается и его результат сравнивается с нулем.

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

Это более эффективно и ясно для вызова String.StartsWith , чем для вызова String.IndexOf и сравнения результата с нулем, чтобы определить, начинается ли строка с заданным префиксом.

IndexOf выполняет поиск по всей строке, а StartsWith сравнивается только в начале строки.

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

Замените вызов String.IndexOf вызовом String.StartsWith.

Пример

В следующем фрагменте кода показано нарушение CA1858:

bool M(string s)
{
    return s.IndexOf("abc") == 0;
}
Function M(s As String) As Boolean
    Return s.IndexOf("abc") = 0
End Function

Следующий фрагмент кода исправляет нарушение.

bool M(string s)
{
    return s.StartsWith("abc");
}
Function M(s As String) As Boolean
    Return s.StartsWith("abc")
End Function

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

Это предупреждение безопасно подавлять, если производительность не является проблемой.

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

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

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

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

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

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