Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA1834 |
| Заголовок | используйте StringBuilder.Append(char) для строк с одним символом. |
| Категория | Производительность |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Как предложение |
| Применимые языки | C# и Visual Basic |
Причина
Это правило срабатывает, когда строка длиной в один символ передается в метод 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), когда это применимо, из списка предложенных вариантов.
Исправление, примененное в 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
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.