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


CA1834: используйте StringBuilder.Append(char) для одно символьных строк

Свойство Значение
Идентификатор правила CA1834
Заголовок используйте StringBuilder.Append(char) для строк с одним символом.
Категория Производительность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 Как предложение

Причина

Это правило срабатывает, когда строка длиной в один символ передается в метод Append.

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

При вызове StringBuilder.Append со строкой длиной в один символ рекомендуется использовать const char вместо единичной длины const string, чтобы повысить производительность.

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

Нарушение можно устранить вручную. В некоторых случаях для исправления кода в Visual Studio можно использовать быстрые действия. Примеры:

Пример 1

Вызовы StringBuilder.Append со строковым литералом единичной длины:

using System;
using System.Text;

namespace TestNamespace
{
    class TestClass
    {
        private void TestMethod()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("a");
        }
    }
}

Совет

Для этого правила в Visual Studio доступно исправление кода. Чтобы использовать его, поместите курсор на нарушение и нажмите клавиши CTRL+ (период). Выберите " StringBuilder.Append(char)" при необходимости. В списке параметров, представленных.

Code fix for CA1834 - Use StringBuilder.Append(char) for single character strings

Исправление, примененное в Visual Studio:

using System;
using System.Text;

namespace TestNamespace
{
    class TestClass
    {
        private void TestMethod()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append('a');
        }
    }
}

В некоторых случаях, например при использовании поля класса единичной длины const string, Visual Studio не предлагает исправление кода (но анализатор по-прежнему срабатывает). В этих случаях требуется исправление вручную.

Пример 2

Вызовы StringBuilder.Append с полем класса единичной длины const string:

using System;
using System.Text;

namespace TestNamespace
{
    public class Program
    {
        public const string unitString = "a";

        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(unitString);
        }
    }
}

После тщательного анализа unitString можно изменить на char, не вызывая ошибок сборки.

using System;
using System.Text;

namespace TestNamespace
{
    public class Program
    {
        public const char unitString = 'a';

        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(unitString);
        }
    }
}

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

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

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

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

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

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

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

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

См. также