CA1801: проверьте неиспользуемые параметры

Свойство Значение
Идентификатор правила CA1801
Заголовок Проверьте неиспользуемые параметры
Категория Использование
Исправление является критическим или не критическим Не критическое — если элемент не виден извне сборки, независимо от внесенных изменений.

Не критическое — если вы изменяете элемент, чтобы использовать в нем параметр.

Критическое — если вы удаляете параметр и он видим извне сборки.
Включен по умолчанию в .NET 8 No

Причина

Сигнатура метода включает параметр, не использующийся в теле метода.

Это правило не проверяет следующие типы методов:

  • методы, на которые ссылается делегат;

  • методы, используемые в качестве обработчиков событий;

  • конструкторы сериализации (см. рекомендации);

  • методы сериализации GetObjectData;

  • методы, объявленные с модификатором abstract (или MustOverride в Visual Basic);

  • методы, объявленные с модификатором virtual (или Overridable в Visual Basic);

  • методы, объявленные с модификатором override (или Overrides в Visual Basic);

  • методы, объявленные с модификатором extern (или инструкцией Declare в Visual Basic).

Это правило не помечает параметры, имя которых содержит символ отмены, например _, _1 и _2. Это уменьшает количество предупреждений о параметрах, которые обязательны для соблюдения требований сигнатуры, например для метода, используемого в качестве делегата, параметра со специальными атрибутами или параметра, значение которого неявно получается платформой во время выполнения без соответствующей ссылки в коде.

Примечание.

Это правило устарело, и его заменяет правило IDE0060. Сведения о принудительном применении анализатора IDE0060 в сборке см. в разделе Анализ в стиле кода.

Описание правила

Проверка параметров в невиртуальных методах, которые не используются в теле метода, чтобы убедиться в отсутствии ошибок, приводящих к невозможности доступа к ним. Неиспользуемые параметры приводят к излишним расходам на техническое обслуживание и эксплуатационным расходам.

Иногда нарушение этого правила может указывать на ошибку реализации в методе. Например, в теле метода должен был использоваться параметр. Отключите предупреждения этого правила, если параметр должен существовать для обеспечения обратной совместимости.

Устранение нарушений

Чтобы устранить нарушение этого правила, удалите неиспользуемый параметр (критическое изменение) или используйте параметр в теле метода (некритическое изменение).

Когда лучше отключить предупреждения

Вы можете безопасно отменить предупреждения, связанные с этим правилом:

  • в коде, который уже был поставлен, для которого исправление стало бы критическим изменением;

  • для параметра this в пользовательском методе расширения для Microsoft.VisualStudio.TestTools.UnitTesting.Assert. Функции в классе Assert являются статическими, поэтому нет необходимости обращаться к параметру this в теле метода.

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

#pragma warning disable CA1801
// The code that's violating the rule is on this line.
#pragma warning restore CA1801

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

[*.{cs,vb}]
dotnet_diagnostic.CA1801.severity = none

Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.

Настройка кода для анализа

Используйте следующий параметр, чтобы выбрать части базы кода для применения этого правила.

Этот параметр можно настроить только для этого правила, для всех правил, к которым он применяется, или для всех правил в этой категории (производительности), к которым она применяется. Дополнительные сведения см. в статье Параметры конфигурации правила качества кода.

Включение определенных контактных зон API

Вы можете настроить, для каких частей базы кода следует выполнять это правило в зависимости от их доступности. Например, чтобы указать, что правило должно выполняться только для закрытой контактной зоны API, добавьте следующую пару "ключ-значение" в файл EDITORCONFIG в своем проекте:

dotnet_code_quality.CAXXXX.api_surface = private, internal

По умолчанию правило CA1801 применяется ко всем областям API (общедоступные, внутренние и частные).

Пример

В следующем примере показаны два метода. Один метод нарушает правило, а другой метод соответствует этому правилу.

// This method violates the rule.
public static string GetSomething(int first, int second)
{
    return first.ToString(CultureInfo.InvariantCulture);
}

// This method satisfies the rule.
public static string GetSomethingElse(int first)
{
    return first.ToString(CultureInfo.InvariantCulture);
}