Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Använd samlingsuttryck för
| 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.