Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Fehler und Warnungen im Zusammenhang mit dem Modifizierer
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.