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


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

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

Обзор

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

Параметры

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

dotnet_style_prefer_collection_expression

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

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

Пример

// 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

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

См. также