Share via


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

Property Värde
Regel-ID IDE0303
Title Använda samlingsuttryck för Skapa
Kategori Format
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_style_prefer_collection_expression

Property Värde beskrivning
Alternativnamn dotnet_style_prefer_collection_expression
Alternativvärden true | when_types_exactly_match Föredrar att endast använda samlingsuttryck när typerna matchar exakt, till exempel ImmutableArray<int> i = ImmutableArray.Create(1, 2, 3);.
when_types_loosely_match
(.NET 9 och senare versioner)*
Föredrar att använda samlingsuttryck även när typerna matchar löst, till exempel IEnumerable<int> i = ImmutableArray.Create(1, 2, 3);. 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 Inaktiverar regeln.
Standardalternativvärde true i .NET 8
when_types_loosely_match i .NET 9 och senare versioner

*Kodkorrigeringen när det här alternativet används kan ä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;
}

Ignorera 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 konfigurationsfilen.none

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

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

Se även