Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Используйте выражение коллекции для
| Свойство | Значение |
|---|---|
| Идентификатор правила | IDE0303 |
| Титул | Используйте выражение коллекции для создания |
| Категория | Стиль |
| Подкатегории | Правила языка (настройки уровня выражения) |
| Применимые языки | С# 12+ |
| Параметры | dotnet_style_prefer_collection_expression |
Обзор
Это правило помечает, где Create() метод или аналогичный метод, назначенный в качестве метода сборки коллекции (с помощью CollectionBuilderAttribute атрибута), используется для инициализации коллекции и предлагает заменить его выражением коллекции ([...]).
Create() Методы являются общими для неизменяемых коллекций, например ImmutableArray.Create(1, 2, 3).
Примечание.
Для этого правила требуются более последние версии неизменяемых API (например, System.Collections.Immutableкоторые выбирают шаблон коллекции выражений).
Параметры
Параметры определяют поведение, которое вы хотите, чтобы правило обеспечивало. Сведения о настройке параметров см. в разделе "Формат параметров".
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.
ImmutableArray<int> i = ImmutableArray.Create(1, 2, 3);
IEnumerable<int> j = ImmutableArray.Create(1, 2, 3);
// Fixed code.
ImmutableArray<int> i = [1, 2, 3];
IEnumerable<int> j = [1, 2, 3];
В следующем фрагменте кода показан пример с пользовательским типом, аннотированным с помощью CollectionBuilderAttribute.
public class Program
{
public static void Main()
{
// IDE0303 violation.
MyCollection<int> c = MyCollection.Create(1, 2, 3);
// IDE0303 fixed code.
MyCollection<int> c = [1, 2, 3];
}
}
static partial class MyCollection
{
public static MyCollection<T> Create<T>(System.ReadOnlySpan<T> values) => default;
public static MyCollection<T> Create<T>(T t1, T t2, T t3) => default;
}
[CollectionBuilder(typeof(MyCollection), "Create")]
class MyCollection<T> : IEnumerable<T>
{
public IEnumerator<T> GetEnumerator() => default;
IEnumerator IEnumerable.GetEnumerator() => default;
}
Отключение предупреждений
Если вы хотите отключить только одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable IDE0303
// The code that's violating the rule is on this line.
#pragma warning restore IDE0303
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.IDE0303.severity = none
Чтобы отключить все правила стиля кода, установите уровень серьёзности для категории Style на none в файле конфигурации .
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Style.severity = none
Дополнительные сведения см. в разделе "Подавление предупреждений анализа кода".