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


Используйте выражение коллекции для пустой коллекции (IDE0301)

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

Обзор

Это правило ищет код, аналогичный Array.Empty<T>() (вызов метода, возвращающий пустую коллекцию) или ImmutableArray<T>.Empty (свойство, возвращающее пустую коллекцию) и предлагает заменить его выражением коллекции ([]).

Параметры

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

dotnet_style_prefer_collection_expression

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

*При использовании этого параметра исправление кода может изменить семантику кода.

Пример

// Code with violations.
int[] i = Array.Empty<int>();
IEnumerable<int> j = Array.Empty<int>();
ReadOnlySpan<int> span = ReadOnlySpan<int>.Empty;

// Fixed code.
int[] i = [];
IEnumerable<int> j = [];
ReadOnlySpan<int> span = [];

В следующем фрагменте кода показан пример с кастомизированным типом.

public class Program
{
    public static void Main()
    {
        // IDE0301 violation.
        MyList<int> x = MyList<int>.Empty;

        // IDE0301 fixed code.
        MyList<int> x = [];
    }
}

class MyList<T> : IEnumerable<T>
{
    public static MyList<T> Empty { get; }

    public IEnumerator<T> GetEnumerator() => default;
    IEnumerator IEnumerable.GetEnumerator() => default;
}

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

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

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

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

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

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

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

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

См. также