Číst v angličtině

Sdílet prostřednictvím


Použití výrazu kolekce pro Create() (IDE0303)

Vlastnost Hodnota
ID pravidla IDE0303
Název Použití výrazu kolekce pro vytvoření
Kategorie Styl
Podkategorie Jazyková pravidla (předvolby na úrovni výrazu)
Příslušné jazyky C# 12+
Možnosti dotnet_style_prefer_collection_expression

Přehled

Toto pravidlo označí místo, kde se Create() metoda nebo podobná metoda, která je určená jako metoda vytváření kolekce (pomocí atributuCollectionBuilderAttribute), používá k inicializaci kolekce a nabízí její nahrazení výrazem kolekce ([...]).

Create() metody jsou společné pro neměnné kolekce, ImmutableArray.Create(1, 2, 3)například .

Poznámka

Toto pravidlo vyžaduje novější verze neměnných rozhraní API (například System.Collections.Immutable), které se přihlašují k vzoru výrazů kolekce.

Možnosti

Možnosti určují chování, které má pravidlo vynutit. Informace o konfiguraci možností naleznete v tématu Formát možnosti.

dotnet_style_prefer_collection_expression

Vlastnost Hodnota Popis
Název možnosti dotnet_style_prefer_collection_expression
Hodnoty možností true | when_types_exactly_match Raději používejte výrazy kolekce pouze tehdy, když se typy přesně shodují, ImmutableArray<int> i = ImmutableArray.Create(1, 2, 3);například .
when_types_loosely_match
(.NET 9 a novější verze)*
Raději používejte výrazy kolekce, i když se typy volně shodují, IEnumerable<int> i = ImmutableArray.Create(1, 2, 3);například . Cílový typ musí odpovídat typu na pravé straně nebo musí být jedním z následujících typů: IEnumerable<T>, ICollection<T>, IList<T>, IReadOnlyCollection<T>, . IReadOnlyList<T>.
false | never Zakáže pravidlo.
Výchozí hodnota možnosti true v .NET 8
when_types_loosely_match v .NET 9 a novějších verzích

*Oprava kódu při použití této možnosti může změnit sémantiku kódu.

Příklad

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

Následující fragment kódu ukazuje příklad s vlastním typem, který je opatřen poznámkami 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;
}

Potlačení upozornění

Pokud chcete potlačit pouze jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

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

Pokud chcete zakázat všechna pravidla stylu kódu, nastavte závažnost pro kategorii Style do none konfiguračního souboru.

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Viz také