CA1000: не объявляйте статические элементы в универсальных типах

Свойство Значение
Идентификатор правила CA1000
Заголовок Не объявляйте статические члены в универсальных типах
Категория Проектирование
Исправление является критическим или не критическим Критическое
Включен по умолчанию в .NET 8 No

Причина

Универсальный тип содержит элемент static (Shared в Visual Basic).

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

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

При вызове элемента static универсального типа нужно указать аргумент этого типа. При вызове универсального экземпляра элемента, не поддерживающего вывод типа, для элемента нужно указать аргумент типа. Синтаксис для указания аргумента типа в этих двух случаях отличается, и их легко спутать, как показано в следующих вызовах:

' Shared method in a generic type.
GenericType(Of Integer).SharedMethod()

' Generic instance method that does not support inference.
someObject.GenericMethod(Of Integer)()
// Static method in a generic type.
GenericType<int>.StaticMethod();

// Generic instance method that does not support inference.
someObject.GenericMethod<int>();

Как правило, следует избегать использования обоих предыдущих объявлений, чтобы аргумент типа необязательно было указывать при вызове элемента. Это приводит к синтаксису вызова членов в универсальных шаблонах, который не отличается от синтаксиса для неуниверсальных шаблонов.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

dotnet_code_quality.CAXXXX.api_surface = private, internal

См. также