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.
  • CS9219: Mehrdeutigkeit zwischen erweiterten und normalen Formen des params-Auflistungsparameters ohne Array. Das einzige entsprechende Argument hat den Typ dynamic. Wandeln Sie das dynamische Argument ggf. um.
  • 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.

Darüber hinaus kann der Compiler die folgende Warnung im Zusammenhang mit dem params-Modifizierer für Methodenparameter generieren:

  • CS9220: Mindestens eine Überladung von Methoden mit dem params-Auflistungsparameter ohne Array ist möglicherweise nur in erweiterter Form anwendbar, was beim dynamischen Versand nicht unterstützt wird.
  • CS9221: Mindestens eine Indexerüberladung mit dem params-Auflistungsparameter ohne Array ist möglicherweise nur in erweiterter Form anwendbar, was beim dynamischen Versand nicht unterstützt wird.
  • CS9222: Mindestens eine Konstruktorüberladung mit dem params-Auflistungsparameter ohne Array ist möglicherweise nur in erweiterter Form anwendbar, was beim dynamischen Versand nicht unterstützt wird.

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.
  • CS9219: Mehrdeutigkeit zwischen erweiterten und normalen Formen des params-Auflistungsparameters ohne Array. Das einzige entsprechende Argument hat den Typ „dynamic“. Wandeln Sie das dynamische Argument ggf. um.
  • 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.

Die folgenden Warnungen deuten darauf hin, dass eine der möglichen Überladungen den dynamischen Versand umfassen kann. Die dynamische Art des Arguments ist nicht an der Auflösung der Überladung beteiligt.

  • CS9220: Mindestens eine Überladung von Methoden mit dem params-Auflistungsparameter ohne Array ist möglicherweise nur in erweiterter Form anwendbar, was beim dynamischen Versand nicht unterstützt wird.
  • CS9221: Mindestens eine Indexerüberladung mit dem params-Auflistungsparameter ohne Array ist möglicherweise nur in erweiterter Form anwendbar, was beim dynamischen Versand nicht unterstützt wird.
  • CS9222: Mindestens eine Konstruktorüberladung mit dem params-Auflistungsparameter ohne Array ist möglicherweise nur in erweiterter Form anwendbar, was beim dynamischen Versand nicht unterstützt wird.

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