CA1002: не следует раскрывать универсальные списки

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

Причина

Тип содержит видимый извне элемент, который является типом System.Collections.Generic.List<T>, возвращает тип List<T> или сигнатура которого содержит параметр List<T>.

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

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

System.Collections.Generic.List<T> — это универсальная коллекция, предназначенная для повышения производительности, а не наследования. List<T> не содержит виртуальные элементы, упрощающие изменение поведения унаследованного класса. Следующие универсальные коллекции предназначены для наследования и должны предоставляться вместо List<T>.

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

Чтобы устранить нарушение этого правила, измените тип System.Collections.Generic.List<T> на одну из универсальных коллекций, предназначенных для наследования.

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

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

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

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

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

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

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

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

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

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

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

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

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

dotnet_code_quality.CAXXXX.api_surface = private, internal

CA1005: не используйте слишком много параметров в универсальных типах

CA1010: коллекции должны реализовывать универсальный интерфейс

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

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

См. также

Универсальные шаблоны