Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA1802 |
| Заголовок | По возможности используйте литералы, где это уместно. |
| Категория | Производительность |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Нет |
| Применимые языки | C# и Visual Basic |
Причина
Поле объявляется static и readonly (Shared и ReadOnly в Visual Basic) и инициализируется со значением, вычисляемым во время компиляции.
По умолчанию это правило проверяет только видимые извне статические поля только для чтения, но это поведение можно настроить.
Описание правила
Значение static readonly поля вычисляется во время выполнения при вызове статического конструктора для объявляющего типа. Если поле static readonly инициализируется при объявлении и статический конструктор не объявлен явным образом, компилятор создает статический конструктор для инициализации поля.
Значение const поля вычисляется во время компиляции и хранится в метаданных, что повышает производительность среды выполнения при сравнении с полем static readonly .
Так как значение, назначенное целевому полю, является вычисленным во время компиляции, измените объявление const на поле таким образом, чтобы значение вычислялось во время компиляции, а не во время выполнения.
Устранение нарушений
Чтобы устранить нарушение этого правила, замените модификаторы static и readonly модификатором const.
Примечание.
Использование модификатора const не рекомендуется для всех сценариев.
Когда лучше отключить предупреждения
Можно отключить предупреждение для этого правила или отключить правило, если производительность не важна.
Предупреждение
Для общедоступных или внешних видимых членов изменение static readonly на const может привести к проблемам.
const значения внедрены в зависимые сборки во время компиляции, поэтому изменения в значении библиотеки могут не распространяться, потенциально вызывая ошибки. Если значение члена может измениться в дальнейшем, отключите это правило.
Примечание.
Использование const безопасно для private компонентов и, как правило, безопасно для internal компонентов, если они не предоставляются через InternalsVisibleTo или развёрнуты изолированно.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA1802
// The code that's violating the rule is on this line.
#pragma warning restore CA1802
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA1802.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.
Настройка кода для анализа
Используйте следующие параметры, чтобы указать части базы кода, к которым будет применяться это правило.
Эти параметры можно настроить только для этого правила, для всех правил, к которым они применяются, или для всех правил в этой категории (производительности), к которым они применяются. Дополнительные сведения см. в статье Параметры конфигурации правила качества кода.
Включите конкретные поверхности API
Вы можете настроить компоненты базы кода для выполнения этого правила на основе их специальных возможностей, задав параметр api_surface. Например, чтобы указать, что правило должно выполняться только для непубличной поверхности API, добавьте следующую пару "ключ-значение" в файл .editorconfig в ваш проект:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Примечание.
Замените XXXX частью CAXXXX идентификатором применимого правила.
Обязательные модификаторы
Это правило можно настроить для переопределения обязательных модификаторов полей. По умолчанию static и readonly являются обязательными модификаторами для анализируемых полей. Это поведение можно заменить на разделенный запятыми список из одного или нескольких значений модификаторов из следующей таблицы:
| Значение параметра | Итоги |
|---|---|
none |
Нет требований к модификатору. |
static или Shared |
Должен быть объявлен как "static" ("Shared" в Visual Basic). |
const |
Должен быть объявлен как const. |
readonly |
Должен быть объявлен как readonly. |
Например, чтобы указать, что правило должно выполняться для статических и полей экземпляра, добавьте следующую пару "ключ-значение" в файл .editorconfig в своем проекте.
dotnet_code_quality.CA1802.required_modifiers = none
Пример
В следующем примере показан тип UseReadOnly, который нарушает правило, и тип UseConstant, который удовлетворяет правилу.
Imports System
Namespace ca1802
' This class violates the rule.
Public Class UseReadOnly
Shared ReadOnly x As Integer = 3
Shared ReadOnly y As Double = x + 2.1
Shared ReadOnly s As String = "readonly"
End Class
' This class satisfies the rule.
Public Class UseConstant
Const x As Integer = 3
Const y As Double = x + 2.1
Const s As String = "const"
End Class
End Namespace
// This class violates the rule.
public class UseReadOnly
{
static readonly int x = 3;
static readonly double y = x + 2.1;
static readonly string s = "readonly";
public void Print()
{
Console.WriteLine(s);
}
}
// This class satisfies the rule.
public class UseConstant
{
const int x = 3;
const double y = x + 2.1;
const string s = "const";
}