Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Verzamelingsexpressie gebruiken voor
Eigenschap | Waarde |
---|---|
Regel-id | IDE0303 |
Titel | Verzamelingsexpressie gebruiken voor Aanmaken |
Categorie | Stijl |
Subcategorie | Taalregels (voorkeuren op expressieniveau) |
Toepasselijke talen | C# 12+ |
Opties | dotnet_style_prefer_collection_expression |
Overzicht
Deze regel markeert plaatsen waar een Create()
methode of een vergelijkbare methode die is aangewezen als de methode voor verzamelingsconstructie (met behulp van het CollectionBuilderAttribute kenmerk) wordt gebruikt om een verzameling te initialiseren en aan te bieden om deze te vervangen door een verzamelingsexpressie ([...]
).
Create()
methoden zijn gebruikelijk voor de onveranderbare verzamelingen, ImmutableArray.Create(1, 2, 3)
bijvoorbeeld.
Notitie
Deze regel vereist meer recente versies van de onveranderbare API's (bijvoorbeeld System.Collections.Immutable), die zich aanmelden voor het patroon collection-expression.
Opties
Met opties geeft u het gedrag op dat door de regel moet worden afgedwongen. Zie Optieindeling voor meer informatie over het configureren van opties.
Voorkeur voor collectie-expressie in dotnet_stijl
Eigenschap | Waarde | Beschrijving |
---|---|---|
Optienaam | Voorkeur voor collectie-expressie in dotnet_stijl | |
Optiewaarden | true | when_types_exactly_match |
Gebruik liever alleen verzamelingsexpressies wanneer typen exact overeenkomen, List<int> list = new List<int>() { 1, 2 }; bijvoorbeeld. |
when_types_loosely_match * |
Gebruik liever verzamelingsexpressies, zelfs wanneer typen losjes overeenkomen, IEnumerable<int> list = new List<int>() { 1, 2 }; bijvoorbeeld. Het doeltype moet overeenkomen met het type aan de rechterkant of een van de volgende typen zijn: IEnumerable<T>, ICollection<T>, IList<T>, , IReadOnlyCollection<T>, . IReadOnlyList<T> |
|
false | never |
Schakelt de regel uit. | |
Standaardoptiewaarde | when_types_loosely_match * |
*Wanneer deze optie wordt gebruikt, kan de codeoplossing de semantiek van uw code wijzigen.
Voorbeeld
// 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];
Het volgende codefragment toont een voorbeeld met een maatwerktype dat is geannoteerd met 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;
}
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable IDE0303
// The code that's violating the rule is on this line.
#pragma warning restore IDE0303
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.IDE0303.severity = none
Als u alle regels voor codestijl wilt uitschakelen, stelt u de ernst voor de categorie Style
none
in op in het configuratiebestand.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Style.severity = none
Zie Hoe codeanalysewaarschuwingen te onderdrukken voor meer informatie.