Utiliser l’expression de collection pour vide (IDE0301)

Propriété Value
Identificateur de la règle IDE0301
Titre Utiliser l’expression de collection pour vide
Catégorie Style
Sous-catégorie Règles de langage (préférences au niveau de l’expression)
Langages applicables C# 12+
Options dotnet_style_prefer_collection_expression

Vue d’ensemble

Cette règle recherche du code similaire à Array.Empty<T>() (un appel de méthode qui retourne une collection vide) ou ImmutableArray<T>.Empty (une propriété qui retourne une collection vide) et propose de la remplacer par une expression de collection ([]).

Options

Les options spécifient le comportement que vous souhaitez que la règle applique. Pour plus d’informations sur la configuration des options, consultez Format d’option.

dotnet_style_prefer_collection_expression

Propriété Valeur Description
Nom d'option dotnet_style_prefer_collection_expression
Valeurs d’option true | when_types_exactly_match Préférez l’utilisation d’expressions de collection uniquement lorsque les types correspondent exactement, par exemple, int[] i = Array.Empty<int>();.
when_types_loosely_match
(.NET 9 et versions ultérieures)*
Préférez l’utilisation d’expressions de collection même lorsque les types ont une faible correspondance, par exemple, IEnumerable<int> i = Array.Empty<int>();. Le type ciblé doit correspondre au type sur le côté droit ou être l’un des types suivants : IEnumerable<T>, ICollection<T>, IList<T>, IReadOnlyCollection<T>, IReadOnlyList<T>.
false | never Il désactive la règle.
Valeur d’option par défaut true dans .NET 8
when_types_loosely_match dans .NET 9 et versions ultérieures

*Le correctif de code lorsque cette option est utilisée peut modifier la sémantique de votre code.

Exemple

// 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 = [];

L’extrait de code suivant montre un exemple avec un type personnalisé.

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;
}

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

#pragma warning disable IDE0301
// The code that's violating the rule is on this line.
#pragma warning restore IDE0301

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

[*.{cs,vb}]
dotnet_diagnostic.IDE0301.severity = none

Pour désactiver toutes les règles de style de code, définissez la gravité de la catégorie Style sur none dans le fichier de configuration.

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Style.severity = none

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.

Voir aussi