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
ouSystem.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ètreparams
- 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
ouout
- 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
ouout
- 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 modificateurin
,ref readonly
,ref
ouout
. - Le modificateur
params
ne peut pas être combiné avec le modificateurthis
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
ouSystem.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ètreparams
- 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 collectionparams
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ètreparams
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.