Partage via


Erreurs et avertissements liés au modificateur params sur les paramètres de méthode

Il existe des erreurs liés à l’instruction lock et à la synchronisation de thread :

  • CS0225 : le paramètre params doit être un tableau unidimensionnel ou présenter un type de collection valide
  • CS0231 : un paramètre params doit être le dernier paramètre dans une liste de paramètres formels.
  • CS0466 : « method1 » ne doit pas présenter de paramètre params, car « method2 » n’en présente pas
  • CS0674 : n’utilisez pas System.ParamArrayAttribute ou System.ParamArrayAttribute/System.Runtime.CompilerServices.ParamCollectionAttribute. Utilisez plutôt le mot clé params.
  • CS0758 : soit les deux déclarations de méthode partielles utilisent un paramètre params, soit aucune des deux n’utilise le paramètre params
  • CS1104 : un tableau de paramètres ne peut pas être utilisé avec le modificateur this dans une méthode d’extension.
  • CS1611 : le paramètre params ne peut pas être déclaré comme dans ref ou out
  • CS1670 : params n’est pas valide dans ce contexte
  • CS1751 : impossible de spécifier une valeur par défaut pour un tableau de paramètres.
  • CS9218 : les arguments de type pour la méthode ne peuvent pas être déduits de l’utilisation, car un argument avec un type dynamique est utilisé et la méthode a un paramètre de collection non-tableau. Essayez de spécifier les arguments de type de façon explicite.
  • CS9223 : la création de la collection params entraîne une chaîne infinie d’appels de constructeur.
  • CS9224 : la méthode ne peut pas être moins visible que le membre disposant de la collection params.
  • CS9225 : le constructeur laisse le membre requis non initialisé.
  • CS9227 : le type ne contient pas de définition pour une méthode Add d’instance appropriée.
  • CS9228 : le type de collection non-tableau doit présenter un constructeur applicable qui peut être appelé sans argument.

Règles de déclaration de méthode

Les erreurs suivantes indiquent l’utilisation d’un modificateur params sur un paramètre lorsque le modificateur params n’est pas autorisé dans ce contexte :

  • CS0231 : un paramètre params doit être le dernier paramètre dans une liste de paramètres formels.
  • CS1104 : un tableau de paramètres ne peut pas être utilisé avec le modificateur this dans une méthode d’extension.
  • CS1611 : le paramètre params ne peut pas être déclaré comme dans ref ou out
  • CS1670 : params n’est pas valide dans ce contexte
  • CS1751 : impossible de spécifier une valeur par défaut pour un tableau de paramètres.

Le compilateur applique les règles suivantes sur votre utilisation du modificateur params sur un paramètre de méthode :

  • Le modificateur params est autorisé uniquement sur le dernier paramètre d’une liste de paramètres formelle. Cela inclut tous les paramètres avec une valeur par défaut.
  • Vous ne pouvez pas inclure d’argument par défaut pour le paramètre lorsque le modificateur params est utilisé.
  • Le modificateur params ne peut pas être appliqué au paramètre de référence. Un paramètre de référence est un paramètre avec le modificateur in, ref readonly, ref ou out.
  • Le modificateur params ne peut pas être combiné avec le modificateur this sur une méthode d’extension.
  • Le modificateur params ne peut pas être utilisé sur un opérateur surchargé.

Dans les versions antérieures à C# 12, le modificateur params ne peut pas être utilisé sur le paramètre d’une méthode anonyme ou d’une expression lambda.

Règles de type de paramètre et d’argument

Les erreurs suivantes indiquent que le type du paramètre utilisé avec params n’est pas valide :

  • CS9218 : les arguments de type pour la méthode ne peuvent pas être déduits de l’utilisation, car un argument avec un type dynamique est utilisé et la méthode a un paramètre de collection non-tableau. Essayez de spécifier les arguments de type de manière explicite.
  • CS0225 : le paramètre params doit être un tableau unidimensionnel ou présenter un type de collection valide
  • CS9227 : le type ne contient pas de définition pour une méthode Add d’instance appropriée.
  • CS9228 : le type de collection non-tableau doit présenter un constructeur applicable qui peut être appelé sans argument.

Dans les versions antérieures à C# 13, le modificateur params est autorisé uniquement sur les tableaux unidimensionnels. Aucun autre type n’était valide.

À compter de C# 13, n’importe quel type de collection valide peut être utilisé. Toutefois, certaines restrictions persistent. Le type de collection doit respecter les mêmes règles que la cible d’une expression de collection.

Autres erreurs d’analyse

Les erreurs suivantes indiquent d’autres problèmes liés à l’utilisation du modificateur params :

  • CS0466 : « method1 » ne doit pas présenter de paramètre params, car « method2» n’en présente pas
  • CS0674 : n’utilisez pas System.ParamArrayAttribute ou System.Runtime.CompilerServices.ParamCollectionAttribute. Utilisez plutôt le mot clé params.
  • CS0758 : soit les deux déclarations de méthode partielles utilisent un paramètre params, soit aucune des deux n’utilise le paramètre params
  • CS9223 : la création de la collection params entraîne une chaîne infinie d’appels de constructeur.
  • CS9224 : la méthode ne peut pas être moins visible que le membre disposant de la collection params.
  • CS9225 : le constructeur laisse le membre requis non initialisé.

Une méthode qui implémente une interface doit inclure le modificateur params si et uniquement si le membre de l’interface présente le modificateur params. De même, soit les deux déclarations d’une méthode partial doivent inclure le modificateur params, soit aucune ne peut inclure le modificateur params.

Vous devez utiliser le modificateur params. Vous ne pouvez pas appliquer les attributs équivalents, System.ParamArrayAttribute ou System.Runtime.CompilerServices.ParamCollectionAttribute.

Le compilateur génère l’une des trois dernières erreurs dans la liste précédente lorsque le code généré pour créer le type de collection n’est pas valide :

  • Le compilateur émet CS9223 lorsque le code émis pour créer la collection contient également une collection d’analyse du même type. En règle générale, la méthode Add prend une collection params du même type.
  • Le compilateur émet CS9224 lorsque la méthode Create pour le type de collection est moins accessible que la méthode qui accepte le paramètre params du type de collection.
  • Le compilateur émet CS9225 lorsque le type de collection a un membre requis et que le constructeur sans paramètre n’initialise pas ce membre et qu’il présente System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute sur le constructeur sans paramètre.

Voir aussi