CA1845: используйте string.Concat на основе диапазона
Свойство | Значение |
---|---|
Идентификатор правила | CA1845 |
Заголовок | Используйте строку на основе диапазона. Сцепить |
Категория | Производительность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | Как предложение |
Причина
Это правило находит выражения объединения строк, содержащие вызовы Substring, и предлагает заменить Substring на AsSpan, а также использовать перегрузку на базе диапазона для String.Concat.
Описание правила
Вызов Substring
создает копию извлеченной подстроки. Используя AsSpan
вместо Substring
и вызывая перегрузку string.Concat
, которая принимает диапазоны, можно исключить ненужное выделение строк.
Устранение нарушений
Чтобы устранить нарушения:
- замените объединение строк вызовом
string.Concat
; - замените вызовы
Substring
вызовамиAsSpan
.
В следующем фрагменте кода приведены примеры нарушений и способы их устранения.
using System;
class Example
{
public void Method()
{
string text = "fwobz the fwutzle";
// Violation: allocations by Substring are wasteful.
string s1 = text.Substring(10) + "---" + text.Substring(0, 5);
// Fixed: using AsSpan avoids allocations of temporary strings.
string s2 = string.Concat(text.AsSpan(10), "---", text.AsSpan(0, 5));
}
}
Когда лучше отключить предупреждения
Не отключайте предупреждения, создаваемые этим правилом. Если извлеченная подстрока передается только методу, имеющему эквивалент на базе диапазона, нет никаких причин использовать Substring
вместо AsSpan
.