Поделиться через


Использование выражения коллекции для массива (IDE0300)

Свойство Ценность
идентификатор правила IDE0300
Заголовок Используйте выражение коллекции для массива
категория Стиль
Подкатегория Языковые правила (предпочтения уровня выражений)
применимые языки C# 12+
Параметры dotnet_style_prefer_collection_expression

Обзор

Это правило помечает места, где выражение коллекции можно использовать для инициализации массива. Например, это правило позволяет упростить код, например new C[] { ... }, new[] { ... }и C[] c = { ... } в форме выражения коллекции ([...]).

Настройки

Параметры указывают поведение, которое вы хотите, чтобы правило применяло. Сведения о настройке параметров см. в разделе Формат параметров.

dotnet_style_prefer_collection_expression

Свойство Ценность Описание
имя параметра dotnet_style_prefer_collection_expression
значения опций true | when_types_exactly_match Предпочитать использовать выражения коллекции только в том случае, если типы совпадают точно, например, int[] i = new int[] { 1, 2, 3 };.
when_types_loosely_match
(.NET 9 и более поздних версий)*
Предпочтительно использовать выражения коллекции, даже если типы нестрого соответствуют, например, IEnumerable<int> i = new int[] { 1, 2, 3 };. Целевой тип должен соответствовать типу справа или быть одним из следующих типов: IEnumerable<T>, ICollection<T>, IList<T>, IReadOnlyCollection<T>, IReadOnlyList<T>.
false | never Отключает правило.
значение параметра по умолчанию true в .NET 8
when_types_loosely_match в .NET 9 и более поздних версиях

*Исправление кода при использовании этого параметра может изменить семантику кода. Например, если у вас был IEnumerable<int> x = new int[] { 1, 2, 3 };, то в исходном коде создается массив. Но в новом коде (IEnumerable<int> x = [1, 2, 3];) вместо этого создается внутренний тип, синтезированный компилятором. Это различие можно наблюдать, если вы используете проверку is или приведение.

Пример

// Code with violations.
int[] i = new int[] { 1, 2, 3 };
IEnumerable<int> j = new int[] { 1, 2, 3 };

// Fixed code.
int[] i = [1, 2, 3];
IEnumerable<int> j = [1, 2, 3];

Подавление предупреждения

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

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

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

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

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

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Style.severity = none

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

См. также