Użyj wyrażenia kolekcji dla Create()
(IDE0303)
Właściwości | Wartość |
---|---|
Identyfikator reguły | IDE0303 |
Tytuł | Używanie wyrażenia kolekcji do tworzenia |
Kategoria | Styl |
Podkategorii | Reguły języka (preferencje na poziomie wyrażenia) |
Odpowiednie języki | C# 12+ |
Opcje | dotnet_style_prefer_collection_expression |
Omówienie
Ta reguła flaguje miejsca, w których Create()
metoda lub podobna metoda wyznaczona jako metoda budowy kolekcji (przy użyciu atrybutu CollectionBuilderAttribute ) jest używana do inicjowania kolekcji i oferuje zastąpienie jej wyrażeniem kolekcji ([...]
).
Create()
metody są typowe dla niezmiennych kolekcji, na przykład ImmutableArray.Create(1, 2, 3)
.
Uwaga
Ta reguła wymaga nowszych wersji niezmiennych interfejsów API (na przykład System.Collections.Immutable), które decydują się na wzorzec wyrażenia kolekcji.
Opcje
Opcje określają zachowanie, które ma być wymuszane przez regułę. Aby uzyskać informacje na temat konfigurowania opcji, zobacz Format opcji.
dotnet_style_prefer_collection_expression
Właściwości | Wartość | Opis |
---|---|---|
Nazwa opcji | dotnet_style_prefer_collection_expression | |
Wartości opcji | true | when_types_exactly_match |
Preferuj używanie wyrażeń kolekcji tylko wtedy, gdy typy są dokładnie zgodne, na przykład ImmutableArray<int> i = ImmutableArray.Create(1, 2, 3); . |
when_types_loosely_match (.NET 9 i nowsze wersje)* |
Wolisz używać wyrażeń kolekcji nawet wtedy, gdy typy są luźno zgodne, na przykład IEnumerable<int> i = ImmutableArray.Create(1, 2, 3); . Typ docelowy musi być zgodny z typem po prawej stronie lub być jednym z następujących typów: IEnumerable<T>, , ICollection<T>IList<T>, IReadOnlyCollection<T>, . IReadOnlyList<T> |
|
false | never |
Wyłącza regułę. | |
Wartość opcji domyślnej | true na platformie .NET 8when_types_loosely_match w programie .NET 9 i nowszych wersjach |
*Poprawka kodu, gdy ta opcja jest używana, może zmienić semantyka kodu.
Przykład
// 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];
Poniższy fragment kodu przedstawia przykład z typem niestandardowym, który jest oznaczony adnotacją .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;
}
Pomijanie ostrzeżenia
Jeśli chcesz pominąć tylko jedno naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable IDE0303
// The code that's violating the rule is on this line.
#pragma warning restore IDE0303
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.IDE0303.severity = none
Aby wyłączyć wszystkie reguły stylu kodu, ustaw ważność dla kategorii Style
na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Style.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.