Бөлісу құралы:


Используйте выражение коллекции для пустой коллекции (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

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

См. также