Dela via


Använd samlingsuttryck för Create() (IDE0303)

Egendom Värde
Regel-ID IDE0303
Titel Använda samlingsuttryck för Skapa
Kategori Stil
Underkategori Språkregler (inställningar på uttrycksnivå)
Tillämpliga språk C# 12+
Alternativ dotnet_style_prefer_collection_expression

Översikt

Den här regeln flaggar platser där en Create() metod eller en liknande metod som är avsedd som samlingskonstruktionsmetod (med CollectionBuilderAttribute attributet) används för att initiera en samling och erbjuder sig att ersätta den med ett samlingsuttryck ([...]).

Create() metoder är vanliga för oföränderliga samlingar, till exempel ImmutableArray.Create(1, 2, 3).

Kommentar

Den här regeln kräver nyare versioner av oföränderliga API:er (till exempel System.Collections.Immutable), som väljer mönstret för samlingsuttryck.

Alternativ

Alternativ anger det beteende som du vill att regeln ska framtvinga. Information om hur du konfigurerar alternativ finns i Alternativformat.

dotnet_stil_föredra_samling_uttryck

Egendom Värde beskrivning
Alternativnamn dotnet_stil_föredra_samling_uttryck
Alternativvärden true | when_types_exactly_match Föredrar att endast använda samlingsuttryck när typerna matchar exakt, till exempel List<int> list = new List<int>() { 1, 2 };.
when_types_loosely_match* Föredrar att använda samlingsuttryck även när typerna matchar löst, till exempel IEnumerable<int> list = new List<int>() { 1, 2 };. Måltypen måste matcha typen till höger eller vara någon av följande typer: IEnumerable<T>, ICollection<T>, IList<T>, IReadOnlyCollection<T>, IReadOnlyList<T>.
false | never Avaktiverar regeln.
Standardalternativvärde when_types_loosely_match*

*När det här alternativet används kan kodkorrigeringen ändra kodens semantik.

Exempel

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

Följande kodfragment visar ett exempel med en anpassad typ som kommenteras med 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;
}

Dämpa en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och återaktiverar sedan regeln.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Om du vill inaktivera alla regler i kodformat anger du allvarlighetsgraden för kategorin Style till i konfigurationsfilennone.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.

Se även