CA1857: параметр ожидает константы для оптимальной производительности
Свойство | Значение |
---|---|
Идентификатор правила | CA1857 |
Заголовок | Параметр ожидает константы для оптимальной производительности |
Категория | Производительность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 8 | Как предупреждение |
Причина
Недопустимый аргумент передается параметру, который заметен с ConstantExpectedAttributeпомощью .
Описание правила
Это правило помечает код, где вы:
- Реализуйте унаследованный метод, который использует ConstantExpectedAttribute атрибут, но не помечайте параметр с ConstantExpectedAttributeпомощью .
- Передайте неконстантный аргумент параметру с атрибутом ConstantExpectedAttribute .
- Передайте недопустимый аргумент константы параметру с атрибутом ConstantExpectedAttribute .
- Передайте константный аргумент параметру, который имеет ConstantExpectedAttribute атрибут, и аргумент выходит за пределы диапазона или Max значенийMin.
Устранение нарушений
Исправьте код, как указано в сообщении об ошибке, которое вы получаете.
Пример 1 (ожидаемый атрибут)
В следующем фрагменте кода показано нарушение CA1857:
public interface I1<T>
{
T M1(T operand1, [ConstantExpected] T operand2);
}
public class C1 : I1<int>
{
public int M1(int operand1, int operand2) =>
throw new NotImplementedException();
}
Следующий фрагмент кода исправляет нарушение.
public interface I1<T>
{
T M1(T operand1, [ConstantExpected] T operand2);
}
public class C1 : I1<int>
{
public int M1(int operand1, [ConstantExpected] int operand2) =>
throw new NotImplementedException();
}
Пример 2 (константная не константная)
В следующем фрагменте кода показано нарушение CA1857:
static void M1(int i) => M2(i);
static void M2([ConstantExpected] int i) { }
Следующий фрагмент кода исправляет нарушение.
static void M1([ConstantExpected] int i) => M2(i);
static void M2([ConstantExpected] int i) { }
Пример 3 (недопустимая константа)
В следующем фрагменте кода показано нарушение CA1857:
static void M1() => M2((string)(object)20);
static void M2([ConstantExpected] string s) { }
Следующий фрагмент кода исправляет нарушение.
static void M1() => M2("20");
static void M2([ConstantExpected] string s) { }
Пример 4 (константа вне границ)
В следующем фрагменте кода показано нарушение CA1857:
static void M1() => M2(5);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }
Следующий фрагмент кода исправляет нарушение.
static void M1() => M2(4);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }
Когда лучше отключить предупреждения
Это безопасно, чтобы отключить предупреждение от этого правила, если производительность не является проблемой.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA1857
// The code that's violating the rule is on this line.
#pragma warning restore CA1857
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none
в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA1857.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.