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