Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Utiliser une expression de collection pour
| Propriété | Valeur |
|---|---|
| Identificateur de la règle | IDE0303 |
| Titre | Utiliser une expression de collection pour Create |
| 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 signale des emplacements où une méthode Create() ou une méthode similaire désignée comme méthode de construction de collection (en utilisant l’attribut CollectionBuilderAttribute) est utilisée pour initialiser une collection et propose de la remplacer par une expression de collection ([...]).
Les méthodes Create() sont courantes pour les collections immuables, par exemple ImmutableArray.Create(1, 2, 3).
Remarque
Cette règle nécessite des versions plus récentes des API immuables (par exemple), System.Collections.Immutablequi optent pour le modèle d’expression de collection.
Paramètres
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 | Descriptif |
|---|---|---|
| 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 quand les types correspondent exactement, par exemple List<int> list = new List<int>() { 1, 2 };. |
when_types_loosely_match* |
Préférez l’utilisation d’expressions de collection même quand les types correspondent peu, par exemple, IEnumerable<int> list = new List<int>() { 1, 2 };. Le type ciblé doit correspondre au type figurant sur le côté droit, ou représenter 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 | when_types_loosely_match* |
*Lorsque cette option est utilisée, le correctif de code peut modifier la sémantique de votre code.
Exemple
// 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];
L’extrait de code suivant illustre un exemple avec un type personnalisé qui est annoté avec 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;
}
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 IDE0303
// The code that's violating the rule is on this line.
#pragma warning restore IDE0303
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.IDE0303.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.