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 8when_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.