Использование выражения коллекции для пустого (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 | |
Значения параметра | 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>, . IReadOnlyList<T>IReadOnlyCollection<T> |
|
false | never |
Отключает проблемное правило. | |
Значение параметра по умолчанию | true в .NET 8when_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
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.