Dela via


Använd samlingsinitierare eller uttryck (IDE0028)

Egenskap Värde
regel-ID IDE0028
rubrik Använd insamlingsinitierare
kategori Stil
underkategori Språkregler (inställningar på uttrycksnivå)
Tillämpliga språk C# och Visual Basic
alternativ dotnet_style_collection_initializer
dotnet_style_prefer_collection_expression

Överblick

Den här formatregeln gäller användningen av insamlingsinitierare och om du använder C# 12 eller senare samlingsuttryck för insamlingsinitiering.

I .NET 8 (C# 12) och senare versioner, om du har alternativet dotnet_style_prefer_collection_expression inställt på true, konverterar kodfixen i Visual Studio din initieringskod för att använda ett samlingsuttryck (). I Visual Basic och i .NET 7 (C# 11) och tidigare versioner konverterar -kodkorrigeringen koden till att använda en insamlingsinitierare (List<int> list = new List<int> { 1, 2, 3 };).

Anteckning

Om du använder kodkorrigering i Visual Studio kan ändringen den erbjuder ha olika semantik i vissa fall. Till exempel ersätts int[] x = new int[] { } med int[] x = [];, som har något olika semantik – kompilatorn använder en singleton för x i stället för att skapa en ny instans.

Alternativ

Ange värdena för de associerade alternativen för den här regeln för att ange om insamlingsinitierare och samlingsuttryck ska föredras vid initiering av samlingar.

Mer information om hur du konfigurerar alternativ finns i Alternativformat.

dotnet_style_collection_initializer

Egenskap Värde Beskrivning
Alternativnamn dotnet_style_collection_initializer
Alternativvärden true Använd hellre insamlingsinitierare.
false Föredra inte insamlingsinitierare.
standardalternativvärde true

dotnet_stil_föredra_samling_uttryck

Egenskap 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 typer 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.

(Det här alternativet gäller endast för C#.)

Exempel

// IDE0028 violation.
List<int> list = new List<int>() { 1, 2, 3 };

// Fixed code (with dotnet_style_prefer_collection_expression = true)
List<int> list = [1, 2, 3];
' IDE0028 violation.
Dim list = New List(Of Integer)
list.Add(1)
list.Add(2)
list.Add(3)

' Fixed code.
Dim list = New List(Of Integer) From {1, 2, 3}

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 IDE0028
// The code that's violating the rule is on this line.
#pragma warning restore IDE0028

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.IDE0028.severity = none

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

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

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

Se även