Freigeben über


Parameter- und Argumentkonflikt

Der Compiler generiert die folgenden Fehler, wenn kein Argument für einen formalen Parameter angegeben wird oder das Argument für diesen Parameter ungültig ist:

  • CS0182: Ein Attributargument muss ein konstanter Ausdruck, typeof-Ausdruck oder Arrayerstellungsausdruck eines Attributparametertyps sein.
  • CS0591: Ungültiger Wert für das Argument zum Attribut.
  • CS0599: Ungültiger Wert für das benannte Attributargument „argument“.
  • CS0617: Kein gültiges benanntes Attributargument. Benannte Attributargumente müssen entweder Felder sein, die nicht schreibgeschützt, statisch oder konstant sind, oder Eigenschaften mit Lese- und Schreibzugriff, die öffentlich und nicht statisch sind.
  • CS0633: Das Argument für das Attribut muss ein gültiger Bezeichner sein.
  • CS0643: Doppeltes benanntes Attributargument.
  • CS0655: Kein gültiges benanntes Attributargument, da es sich nicht um einen gültigen Attributparametertyp handelt.
  • CS0839: Argument fehlt.
  • CS1016: Benanntes Attributargument erwartet.
  • CS1739: Die beste Überladung enthält keinen benannten Parameter
  • CS1740: Das benannte Argument kann nicht mehrmals angegeben werden.
  • CS1742: Ein Arrayzugriff verfügt möglicherweise nicht über einen benannten Argumentspezifizierer.
  • CS1744: Das benannte Argument legt einen Parameter fest, für den bereits ein positionelles Argument angegeben wurde.
  • CS1746: Der Delegat enthält keinen Parameter mit dem Namen „name“.
  • CS7036: Es wurde kein Argument angegeben, das dem erforderlichen Parameter entspricht.
  • CS7067: Der Attributkonstruktorparameter ist optional, aber ein Standardparameterwert wurde nicht angegeben.
  • CS8324: Die Spezifikationen für benannte Argumente müssen in einem dynamischen Aufruf nach Angabe aller festen Argumente aufgeführt werden.
  • CS8905: Ein Funktionszeiger darf nicht mit benannten Argumenten aufgerufen werden.
  • CS8943: NULL ist kein gültiger Parametername. Um auf den Empfänger einer Instanzmethode zuzugreifen, verwenden Sie die leere Zeichenfolge als Parameternamen.
  • CS8944: Die Methode ist keine Instanzmethode, der Empfänger kann kein Handlerargument einer interpolierten Zeichenfolge sein.
  • CS8945: Kein gültiger Parametername.
  • CS8948: InterpolatedStringHandlerArgumentAttribute-Argumente dürfen nicht auf den Parameter verweisen, für den das Attribut verwendet wird.
  • CS8949: Das auf den Parameter angewendete InterpolatedStringHandlerArgumentAttribute ist falsch formatiert und kann nicht interpretiert werden. Erstellen Sie eine Instanz von diesem manuell.
  • CS8950: Der Parameter ist ein Argument für die interpolierte Zeichenfolgenhandlerkonvertierung für den Parameter, aber das entsprechende Argument wird nach dem Interpolierten Zeichenfolgenausdruck angegeben. Ordnen Sie die Argumente neu an.
  • CS8951: Der Parameter wird nicht explizit angegeben, sondern als Argument für die Interpolierte Zeichenfolgenhandlerkonvertierung für den Parameter verwendet.
  • CS8964: Das CallerArgumentExpressionAttribute kann nur auf Parameter mit Standardwerten angewendet werden.
  • CS8965: Das CallerArgumentExpressionAttribute, das auf den Parameter angewendet wird, hat keine Auswirkungen, da es sich um einen selbstreferenziellen Wert handelt.
  • CS8966: Das CallerArgumentExpressionAttribute besitzt keine Auswirkungen, weil es für einen Member gilt, der in Kontexten verwendet wird, in denen optionale Argumente unzulässig sind.

Fehlendes Argument

Die folgenden allgemeinen Fehler werden ausgegeben, wenn der Compiler keine Argumente mit allen Memberparametern abgleichen kann:

  • CS0839: Argument fehlt.
  • CS7036: Es wurde kein Argument angegeben, das dem erforderlichen Parameter entspricht.

Diese Fehler sind allgemein: Der Compiler kann die in einem Methodenaufruf angegebenen Argumente nicht mit den erforderlichen Parametern der Methode abgleichen. Überprüfen Sie die folgenden Ursachen:

  • Stellen Sie sicher, dass Sie alle erforderlichen Argumente eingeschlossen haben.
  • Stellen Sie sicher, dass die Argumente in der richtigen Reihenfolge vorhanden sind.
  • Stellen Sie sicher, dass alle Argumente den richtigen Typ aufweisen.
  • Stellen Sie sicher, dass die Regeln für die Überladungsauflösung die erwartete Methode ausgewählt haben.

Möglicherweise wird auch CS7036 angezeigt, wenn Sie überladene lokale Funktionen geschrieben haben. Lokale Funktionen können nicht überladen werden. Der Compiler erkennt nur die erste lokale Funktion mit diesem Namen. Überprüfen Sie, ob Sie eine andere lokale Funktion aufrufen möchten.

Diese Fehler werden häufig mit anderen Diagnosen angezeigt, die bei der Diagnose der richtigen Ursache helfen können.

Argumente für Attribute

Der Compiler gibt diese Fehler aus, wenn ein Argument für einen Attributkonstruktor falsch ist:

  • CS0182: Ein Attributargument muss ein konstanter Ausdruck, typeof-Ausdruck oder Arrayerstellungsausdruck eines Attributparametertyps sein.
  • CS0591: Ungültiger Wert für das Argument zum Attribut.
  • CS0599: Ungültiger Wert für das benannte Attributargument „argument“.
  • CS0617: Kein gültiges benanntes Attributargument. Benannte Attributargumente müssen entweder Felder sein, die nicht schreibgeschützt, statisch oder konstant sind, oder Eigenschaften mit Lese- und Schreibzugriff, die öffentlich und nicht statisch sind.
  • CS0633: Das Argument für das Attribut muss ein gültiger Bezeichner sein.
  • CS0643: Doppeltes benanntes Attributargument.
  • CS0655: Kein gültiges benanntes Attributargument, da es sich nicht um einen gültigen Attributparametertyp handelt.

Wenn Sie System.AttributeUsageAttribute in der Attributdefinition verwenden, achten Sie darauf, dass die zulässigen Werte sich nicht gegenseitig ausschließen. Überprüfen Sie, ob der Typ und die Reihenfolge der Argumente für das Attribut korrekt sind. Stellen Sie sicher, dass der Text der Zeichenfolgenargumente gültig ist. Bei vielen Attributen muss das Argument ein gültiger C#-Bezeichner sein. Argumente für Attributkonstruktoren müssen Kompilierzeitkonstanten sein. Daher sind sie auf Typen beschränkt, die Literalkonstanten unterstützen. Darüber hinaus sind die folgenden Typen, die Literalkonstanten zulassen, als Attributparameter unzulässig:

Sie können keine wiederholten benannten Argumente mit demselben Parameternamen angeben. Sie können barrierefreie Eigenschaften nur festlegen, wenn Sie ein Attribut initialisieren. Private Eigenschaften können nicht festgelegt werden.

Benannte und optionale Parameter und Argumente

Der Compiler gibt die folgenden Fehler für die falsche Verwendung von benannten und optionalen Argumenten aus:

  • CS1016: Benanntes Attributargument erwartet.
  • CS1739: Die beste Überladung enthält keinen benannten Parameter
  • CS1740: Das benannte Argument kann nicht mehrmals angegeben werden.
  • CS1742: Ein Arrayzugriff verfügt möglicherweise nicht über einen benannten Argumentspezifizierer.
  • CS1744: Das benannte Argument legt einen Parameter fest, für den bereits ein positionelles Argument angegeben wurde.
  • CS1746: Der Delegat enthält keinen Parameter mit dem Namen „name“.
  • CS7067: Der Attributkonstruktorparameter ist optional, aber ein Standardparameterwert wurde nicht angegeben.
  • CS8324: Die Spezifikationen für benannte Argumente müssen in einem dynamischen Aufruf nach Angabe aller festen Argumente aufgeführt werden.
  • CS8905: Ein Funktionszeiger darf nicht mit benannten Argumenten aufgerufen werden.

Überprüfen Sie die folgenden Ursachen für diese Fehler:

  • Der Parametername des benannten Arguments ist falsch.
  • Die ausgewählte Überladung weist keinen Parameter auf, der dem benannten Argument entspricht.
  • Ein Parametername wird für mehrere Argumente verwendet.
  • Nach benannten Argumenten folgt ein (unbenanntes) Positionsargument.
  • Benannte Argumente sind für Arrayindexparameter nicht zulässig.

Handler für interpolierte Zeichenfolgen

Der Compiler gibt die folgenden Fehler aus, wenn Sie einen interpolierten Zeichenfolgenhandler falsch angegeben haben.

  • CS8943: NULL ist kein gültiger Parametername. Um auf den Empfänger einer Instanzmethode zuzugreifen, verwenden Sie die leere Zeichenfolge als Parameternamen.
  • CS8944: Keine Instanzmethode, der Empfänger kann kein Handlerargument einer interpolierten Zeichenfolge sein.
  • CS8945: Kein gültiger Parametername.
  • CS8948: InterpolatedStringHandlerArgumentAttribute-Argumente dürfen nicht auf den Parameter verweisen, für den das Attribut verwendet wird.
  • CS8949: Das auf den Parameter angewendete InterpolatedStringHandlerArgumentAttribute ist falsch formatiert und kann nicht interpretiert werden. Erstellen Sie eine Instanz manuell.
  • CS8950: Der Parameter ist ein Argument für die interpolierte Zeichenfolgenhandlerkonvertierung für den Parameter, aber das entsprechende Argument wird nach dem Interpolierten Zeichenfolgenausdruck angegeben.
  • CS8951: Der Parameter wird nicht explizit angegeben, sondern als Argument für die Interpolierte Zeichenfolgenhandlerkonvertierung für den Parameter verwendet.

Ein interpolierter Zeichenfolgenhandler ist ein musterbasiertes Konstrukt. Es ist wichtig, dass das Muster richtig ist. Lesen Sie die Featurespezifikation, oder absolvieren Sie das Tutorial zum Erstellen eines interpolierten Zeichenfolgenhandlers.

Debuginformationen für Aufrufer

Der Compiler gibt den folgenden Fehler bei einer falschen Verwendung von System.Runtime.CompilerServices.CallerArgumentExpressionAttribute aus:

  • CS8964: Das CallerArgumentExpressionAttribute kann nur auf Parameter mit Standardwerten angewendet werden.

Darüber hinaus gibt der Compiler die folgenden Warnungen bei einer falschen Verwendung von CallerArgumentExpressionAttribute aus:

  • CS8965: Das CallerArgumentExpressionAttribute, das auf den Parameter angewendet wird, hat keine Auswirkungen, da es sich um einen selbstreferenziellen Wert handelt.
  • CS8966: Das CallerArgumentExpressionAttribute besitzt keine Auswirkungen, weil es für einen Member gilt, der in Kontexten verwendet wird, in denen optionale Argumente unzulässig sind.

Jeder Parameter, der mit dem Attribut CallerArgumentExpression versehen ist, muss über einen Standardwert verfügen.