Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| 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.