CA1861: избегайте массивов констант в качестве аргументов
Свойство | Значение |
---|---|
Идентификатор правила | CA1861 |
Заголовок | Избегайте массивов констант в качестве аргументов |
Категория | Производительность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | Как предложение |
Причина
Константный массив литеральных значений передается методу с помощью регулярного вызова или вызова метода расширения.
Описание правила
Массивы констант, передаваемые в качестве аргументов, не используются повторно при вызове, что означает, что новый массив создается каждый раз. Если переданный массив не мутируется в вызываемом static readonly
методе, рассмотрите возможность извлечения его в поле для повышения производительности.
Примечание.
Если вызывается метод мутирует переданный массив или если вы не уверены, будет ли метод мутировать массив, не извлекайте массив в static readonly
поле. Это может быть критическим изменением. В этом случае лучше отключить предупреждение.
Устранение нарушений
Извлеките массивы констант в static readonly
поля, если переданный массив не мутируется в вызываемом методе.
В следующем примере показано нарушение правила:
// A method argument
string message = string.Join(" ", new[] { "Hello", "world!" });
' A method argument
Dim message As String = String.Join(" ", {"Hello", "world!"})
В следующем примере показано, как исправлено нарушение этого правила путем извлечения аргумента в static readonly
поле.
private static readonly string[] array = new[] { "Hello" , "world!" };
private string GetMessage()
{
return string.Join(" ", array);
}
Private Shared ReadOnly array As String() = {"Hello", "world!"}
Private Function GetMessage() As String
Return String.Join(" ", array)
End Function
Теперь значение массива разрешается во время компиляции, а не во время выполнения, что делает код более производительным.
Когда лучше отключить предупреждения
Запретить нарушение этого правила, если:
- Вызов выполняется только один раз.
- Массив может быть мутирован в вызываемом методе или не уверен, будет ли он мутирован.
- Вы не беспокоитесь о влиянии производительности на создание массива констант для каждого вызова.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA1861
// The code that's violating the rule is on this line.
#pragma warning restore CA1861
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none
в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA1861.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.