Freigeben über


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 oder System.ParamArrayAttribute/System.Runtime.CompilerServices.ParamCollectionAttribute. Verwenden Sie stattdessen das Schlüsselwort params.
  • CS0758: Beide partiellen Methodendeklarationen müssen einen params-Parameter verwenden, oder keine von beiden darf einen params-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 oder out 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 oder out 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 Modifizierer in, ref readonly, ref oder out.
  • Der params-Modifizierer kann nicht mit dem this-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 oder System.Runtime.CompilerServices.ParamCollectionAttribute. Verwenden Sie stattdessen das Schlüsselwort params.
  • CS0758: Beide partiellen Methodendeklarationen müssen einen params-Parameter verwenden, oder keine von beiden darf einen params-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 eine params-Auflistung desselben Typs.
  • Der Compiler gibt CS9224 aus, wenn die Create-Methode für den Auflistungstyp weniger zugänglich ist als die Methode, die den params-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.

Weitere Informationen