Udostępnij za pośrednictwem


Użyj wyrażenia kolekcji dla pustego (IDE0301)

Właściwości Wartość
Identyfikator reguły IDE0301
Tytuł Używanie wyrażenia kolekcji dla pustego
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 wyszukuje kod podobny do Array.Empty<T>() (wywołanie metody zwracające pustą kolekcję) lub ImmutableArray<T>.Empty (właściwość zwracająca pustą kolekcję) i oferuje zastąpienie go wyrażeniem 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 int[] i = Array.Empty<int>();.
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 = Array.Empty<int>();. 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 8
when_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.
int[] i = Array.Empty<int>();
IEnumerable<int> j = Array.Empty<int>();
ReadOnlySpan<int> span = ReadOnlySpan<int>.Empty;

// Fixed code.
int[] i = [];
IEnumerable<int> j = [];
ReadOnlySpan<int> span = [];

Poniższy fragment kodu przedstawia przykład z typem niestandardowym.

public class Program
{
    public static void Main()
    {
        // IDE0301 violation.
        MyList<int> x = MyList<int>.Empty;

        // IDE0301 fixed code.
        MyList<int> x = [];
    }
}

class MyList<T> : IEnumerable<T>
{
    public static MyList<T> Empty { get; }

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

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

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