Auf Englisch lesen

Teilen ü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 Attribut-Argument muss ein konstanter Ausdruck sein, typeof Ausdruck oder Arrayerzeugungsausdruck eines Attributparametertyps
  • CS0591: Ungültiger Wert für das Argument des attributs
  • CS0599: Ungültiger Wert für benanntes Attributargument 'argument'
  • CS0617: Kein gültiges benanntes Attributargument. Benannte Attributargumente müssen Felder sein, die nicht schreibgeschützt, statisch oder const sind, oder schreibgeschützte Eigenschaften, die öffentlich und nicht statisch sind.
  • CS0633: Das Argument für das Attribut muss ein gültiger Bezeichner sein
  • CS0643: Doppeltes benanntes Attribut-Argument
  • CS0655: Kein gültiges benanntes Attributargument, da es sich nicht um einen gültigen Attributparametertyp handelt
  • CS0839: Argument fehlt.
  • CS1016: Benanntes Attribut-Argument erwartet
  • CS1739: Die beste Überladung für hat keinen Parameter namens
  • CS1740: Ein benanntes Argument kann nicht mehrfach angegeben werden
  • CS1742: Ein Array-Zugriff darf keinen benannten Argument-Spezifizierer haben
  • CS1744: Benanntes Argument gibt einen Parameter an, für den bereits ein Positionsargument angegeben wurde
  • CS1746: Der Delegat hat keinen Parameter namens "name"
  • CS7036: Es gibt kein Argument, das dem erforderlichen Parameter entspricht
  • CS7067: Der Parameter des Attributkonstruktors ist optional, aber es wurde kein Standardparameterwert angegeben.
  • CS8324: Die Angabe von benannten Argumenten muss erfolgen, nachdem alle festen Argumente in einem dynamischen Aufruf angegeben worden sind.
  • CS8905: Ein Funktionszeiger kann nicht mit benannten Argumenten aufgerufen werden.
  • CS8943: null ist kein gültiger Parametername. Verwenden Sie um auf den Empfänger einer Instanzmethode zuzugreifen die leere Zeichenfolge als Parameternamen.
  • CS8944: Methode keine Instanzmethode ist, kann der Empfänger kein interpoliertes String-Handler-Argument sein.
  • CS8945-: Kein gültiger Parametername.
  • CS8948: InterpolatedStringHandlerArgumentAttribute Argumente können nicht auf den Parameter verweisen, für den das Attribut verwendet wird.
  • CS8949: Die InterpolatedStringHandlerArgumentAttribute auf den Parameter angewandt wird, ist falsch geformt und kann nicht interpretiert werden. Konstruieren Sie eine Instanz davon manuell.
  • CS8950: Parameter ist ein Argument für die Umwandlung der interpolierten Zeichenfolge in Parameter, aber das entsprechende Argument ist nach dem Ausdruck für die interpolierte Zeichenfolge angegeben. Ordnen Sie die Argumente neu an.
  • CS8951: Der Parameter wird nicht explizit angegeben, sondern als Argument für die Umwandlung der interpolierten Zeichenkette in einen Parameter verwendet.
  • CS8964: Die CallerArgumentExpressionAttribute kann nur auf Parameter mit Standardwerten angewendet werden
  • CS8965: Die CallerArgumentExpressionAttribute auf einen Parameter angewandt wird, hat keine Wirkung, da er selbstreferenziell ist.
  • CS8966: Die CallerArgumentExpressionAttribute hat keine Auswirkung, da sie auf ein Mitglied angewendet wird, das in Kontexten verwendet wird, die keine optionalen Argumente zulassen

Fehlendes Argument

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

  • CS0839: Argument fehlt.
  • CS7036: Es gibt kein Argument das dem erforderlichen Parameter entspricht

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

  • Stellen Sie sicher, dass Sie alle erforderlichen Argumente eingeschlossen haben.
  • Stellen Sie sicher, dass sich die Argumente in der richtigen Reihenfolge befinden.
  • Stellen Sie sicher, dass alle Argumente der richtige Typ sind.
  • 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 treten häufig zusammen mit anderen Diagnoseverfahren auf, die helfen können, die richtige Ursache zu identifizieren.

Argumente für Attribute

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

  • CS0182: Ein Attribut-Argument muss ein konstanter Ausdruck sein, typeof Ausdruck oder Arrayerzeugungsausdruck eines Attributparametertyps
  • CS0591: Ungültiger Wert für das Argument des attributs
  • CS0599: Ungültiger Wert für benanntes Attributargument 'argument''
  • CS0617: Kein gültiges benanntes Attributargument. Benannte Attributargumente müssen Felder sein, die nicht schreibgeschützt, statisch oder const sind, oder schreibgeschützte Eigenschaften, die öffentlich und nicht statisch sind
  • CS0633: Das Argument für das Attribut muss ein gültiger Bezeichner sein
  • CS0643: Doppeltes benanntes Attribut-Argument
  • CS0655: ist kein gültiges benanntes Attributargument, da es sich nicht um einen gültigen Attributparametertyp handelt

Wenn Sie die System.AttributeUsageAttribute für die Attributdefinition verwenden, stellen Sie sicher, 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 Kompilierungszeitkonstanten 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 nicht wiederholte benannte 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 Attribut-Argument erwartet
  • CS1739: Die beste Überladung für hat keinen Parameter namens
  • CS1740: Benanntes Argument kann nicht mehrmals angegeben werden
  • CS1742: Ein Array-Zugriff darf keinen benannten Argument-Spezifizierer haben
  • CS1744: Benanntes Argument gibt einen Parameter an, für den bereits ein Positionsargument angegeben wurde
  • CS1746: Der Delegat verfügt nicht über einen Parameter namens "name"
  • CS7067: Der Parameter für den Attribut-Konstruktor ist optional, aber es wurde kein Standardwert angegeben.
  • CS8324: Die Angabe von benannten Argumenten muss erfolgen, nachdem alle festen Argumente in einem dynamischen Aufruf angegeben worden sind.
  • CS8905: Ein Funktionszeiger kann 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 wiederholt.
  • 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 Zugriff auf den Empfänger einer Instanzmethode zu erhalten, verwenden Sie die leere Zeichenkette als Parameternamen
  • CS8944: Da es sich nicht um eine Instanzmethode handelt, kann der Empfänger kein interpoliertes Zeichenfolgenhandler-Argument sein.
  • CS8945: Kein gültiger Parametername.
  • CS8948: InterpolatedStringHandlerArgumentAttribute Argumente können nicht auf den Parameter verweisen, für den das Attribut verwendet wird.
  • CS8949: Die InterpolatedStringHandlerArgumentAttribute auf den Parameter angewandt wird, ist falsch geformt und kann nicht interpretiert werden. Konstruieren Sie eine Instanz manuell.
  • CS8950: Parameter ist ein Argument für die Umwandlung der interpolierten Zeichenfolge in Parameter, aber das entsprechende Argument wird nach dem Ausdruck für die interpolierte Zeichenfolge angegeben.
  • CS8951: Der Parameter wird nicht explizit angegeben, sondern als Argument für die Umwandlung der interpolierten Zeichenkette in einen 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 des System.Runtime.CompilerServices.CallerArgumentExpressionAttributeaus:

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

Darüber hinaus gibt der Compiler die folgenden Warnungen bei einer falschen Verwendung des CallerArgumentExpressionAttributeaus:

  • CS8965: Die CallerArgumentExpressionAttribute auf einen Parameter angewandt wird, hat keine Wirkung, da er selbstreferenziell ist.
  • CS8966: Die CallerArgumentExpressionAttribute hat keine Auswirkung, da sie für ein Mitglied gilt, das in Kontexten verwendet wird, die keine optionalen Argumente zulassen

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