Fehler und Warnungen im Zusammenhang mit dem Modifizierer params
für Methodenparameter
Es gibt einige Fehler im Zusammenhang mit der lock
-Anweisung und der Threadsynchronisierung:
- CS0225: Der params-Parameter muss ein eindimensionales Array sein oder einen gültigen Auflistungstyp aufweisen.
- CS0231: Ein params-Parameter muss der letzte Parameter in einer formellen Parameterliste sein.
- CS0466: „method1“ sollte keinen params-Parameter enthalten, da auch „method2“ keinen enthält.
- CS0674: Verwenden Sie nicht
System.ParamArrayAttribute
oderSystem.ParamArrayAttribute
/System.Runtime.CompilerServices.ParamCollectionAttribute
. Verwenden Sie stattdessen das Schlüsselwortparams
. - CS0758: Beide partiellen Methodendeklarationen müssen einen
params
-Parameter verwenden, oder keine von beiden darf einenparams
-Parameter verwenden. - CS1104: Ein Parameterarray kann für eine Erweiterungsmethode nicht mit dem
this
-Modifizierer verwendet werden. - CS1611: Der params-Parameter kann nicht wie in
ref
oderout
deklariert werden. - CS1670:
params
ist in diesem Kontext ungültig. - CS1751: Es kann kein Standardwert für ein Parameterarray angegeben werden.
- CS9218: Die Typargumente der Methode können nicht per Rückschluss aus der Nutzung abgeleitet werden, da ein Argument mit dynamischem Typ verwendet wird und die Methode den params-Auflistungsparameter ohne Array aufweist. Geben Sie die Typargumente explizit an.
- CS9223: Die Erstellung der params-Auflistung führt zu einer unendlichen Aufrufkette des Konstruktors.
- CS9224: Die Methode darf nicht weniger sichtbar sein als das Element mit params-Auflistung.
- CS9225: Der Konstruktor lässt den erforderlichen Member deinitialisiert.
- CS9227: Der Typ enthält keine Definition für eine geeignete
Add
-Methode für die Instanz. - CS9228: Der Typ der params-Auflistung ohne Array muss über einen anwendbaren Konstruktor verfügen, der ohne Argumente aufgerufen werden kann.
Deklarationsregeln für Methoden
Die folgenden Fehler deuten darauf hin, dass ein params
-Modifizierer für einen Parameter verwendet wird, wenn der params
-Modifizierer in diesem Kontext nicht zulässig ist:
- CS0231: Ein params-Parameter muss der letzte Parameter in einer formellen Parameterliste sein.
- CS1104: Ein Parameterarray kann für eine Erweiterungsmethode nicht mit dem
this
-Modifizierer verwendet werden. - CS1611: Der params-Parameter kann nicht wie in
ref
oderout
deklariert werden. - CS1670:
params
ist in diesem Kontext ungültig. - CS1751: Es kann kein Standardwert für ein Parameterarray angegeben werden.
Der Compiler erzwingt die folgenden Regeln für die Verwendung des params
-Modifizierers für einen Methodenparameter:
- Der
params
-Modifizierer ist nur für den letzten Parameter in einer formellen Parameterliste zulässig. Dies schließt alle Parameter mit einem Standardwert ein. - Sie können kein Standardargument für den Parameter einschließen, wenn der
params
-Modifizierer verwendet wird. - Der
params
-Modifizierer kann nicht auf einen Verweisparameter angewendet werden. Ein Verweisparameter ist ein Parameter mit dem Modifiziererin
,ref readonly
,ref
oderout
. - Der
params
-Modifizierer kann nicht mit demthis
-Modifizierer für eine Erweiterungsmethode kombiniert werden. - Der
params
-Modifizierer kann nicht für einen überladenen Operator verwendet werden.
In Versionen vor C# 12 kann der params
-Modifizierer nicht für den Parameter einer anonymen Methode oder eines Lambdaausdrucks verwendet werden.
Regeln für Parameter- und Argumenttypen
Die folgenden Fehler deuten darauf hin, dass der Typ des Parameters, der mit params
verwendet wird, ungültig ist:
- CS9218: Die Typargumente der Methode können nicht per Rückschluss aus der Nutzung abgeleitet werden, da ein Argument mit dynamischem Typ verwendet wird und die Methode den params-Auflistungsparameter ohne Array aufweist. Geben Sie die Typargumente explizit an.
- CS0225: Der params-Parameter muss ein eindimensionales Array sein oder einen gültigen Auflistungstyp aufweisen.
- CS9227: Der Typ enthält keine Definition für eine geeignete
Add
-Methode für die Instanz. - CS9228: Der Typ der params-Auflistung ohne Array muss über einen anwendbaren Konstruktor verfügen, der ohne Argumente aufgerufen werden kann.
In Versionen vor C# 13 ist der Modifizierer params
nur für eindimensionale Arrays zulässig. Es waren keine anderen Typen gültig.
Ab C# 13 kann jeder gültige Auflistungstyp verwendet werden. Einige Einschränkungen bleiben jedoch bestehen. Der Auflistungstyp muss den gleichen Regeln entsprechen wie das Ziel eines Auflistungsausdrucks.
Andere params-Fehler
Die folgenden Fehler deuten auf andere Probleme bei der Verwendung des Modifizierers params
hin:
- CS0466: „method1“ sollte keinen params-Parameter enthalten, da auch „method2“ keinen enthält.
- CS0674: Verwenden Sie nicht
System.ParamArrayAttribute
oderSystem.Runtime.CompilerServices.ParamCollectionAttribute
. Verwenden Sie stattdessen das Schlüsselwortparams
. - CS0758: Beide partiellen Methodendeklarationen müssen einen
params
-Parameter verwenden, oder keine von beiden darf einenparams
-Parameter verwenden. - CS9223: Die Erstellung der params-Auflistung führt zu einer unendlichen Aufrufkette des Konstruktors.
- CS9224: Die Methode darf nicht weniger sichtbar sein als das Element mit params-Auflistung.
- CS9225: Der Konstruktor lässt den erforderlichen Member deinitialisiert.
Eine Methode, die eine Schnittstelle implementiert, muss den params
-Modifizierer enthalten, aber nur, wenn der Schnittstellenmember den params
-Modifizierer aufweist. Ebenso müssen beide Deklarationen einer partial
-Methode den params
-Modifizierer enthalten, oder keine von beiden darf den params
-Modifizierer enthalten.
Sie müssen den Modifizierer params
verwenden. Sie können die entsprechenden Attribute (System.ParamArrayAttribute oder System.Runtime.CompilerServices.ParamCollectionAttribute) nicht anwenden.
Der Compiler generiert einen der letzten drei Fehler in der vorherigen Liste, wenn der zum Erstellen des Auflistungstyps generierte Code ungültig ist:
- Der Compiler gibt CS9223 aus, wenn der zum Erstellen der Auflistung ausgegebene Code auch eine params-Auflistung desselben Typs enthält. In der Regel verwendet die
Add
-Methode eineparams
-Auflistung desselben Typs. - Der Compiler gibt CS9224 aus, wenn die
Create
-Methode für den Auflistungstyp weniger zugänglich ist als die Methode, die denparams
-Parameter des Auflistungstyps verwendet. - Der Compiler gibt CS9225 aus, wenn der Auflistungstyp über einen erforderlichen Member verfügt, der parameterlose Konstruktor diesen Member nicht initialisiert und System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute für den parameterlosen Konstruktor festgelegt ist.