Udostępnij za pomocą


Używanie wyrażenia kolekcji dla konstruktora (IDE0304)

Nieruchomość Wartość
Identyfikator reguły IDE0304
Tytuł Użycie wyrażenia kolekcji w celu budowania obiektu
Kategoria Styl
Podkategorii Reguły języka (preferencje na poziomie wyrażenia)
Odpowiednie języki Język C# 12+
Opcje dotnet_style_prefer_collection_expression

Omówienie

Ta reguła flaguje miejsca, w których wywoływana jest metoda CreateBuilder() lub podobna, aby utworzyć typ konstruktora, który dodaje elementy, a na koniec tworzy typ kolekcji z atrybutem CollectionBuilderAttribute (na przykład przez wywołanie metody ImmutableArray<T>.Builder.ToImmutable()). Zamiast tego można użyć wyrażenia kolekcji ([...]), aby zainicjować tę kolekcję.

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 (preferencja stylu .NET do wyrażania się w kolekcjach)

Nieruchomość Wartość Opis
Nazwa opcji dotnet_style_prefer_collection_expression (preferencja stylu .NET do wyrażania się w kolekcjach)
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 List<int> list = new List<int>() { 1, 2 };.
when_types_loosely_match* Wolisz używać wyrażeń kolekcji nawet wtedy, gdy typy są luźno zgodne, na przykład IEnumerable<int> list = new List<int>() { 1, 2 };. 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 when_types_loosely_match*

*Gdy ta opcja jest używana, poprawka kodu może zmienić semantyka kodu.

Przykład

// Code with violation.
var builder = ImmutableArray.CreateBuilder<int>();
builder.Add(1);
builder.AddRange(new int[] { 5, 6, 7 });
ImmutableArray<int> i = builder.ToImmutable();

// Fixed code.
ImmutableArray<int> i = [1, .. new int[] { 5, 6, 7 }];

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.IDE0304.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.

Zobacz też