Fehler und Warnungen bei Verwendung von Lambda-Ausdrücken und anonymen Funktionen

Mehrere Fehler beziehen sich auf das Deklarieren und Verwenden von Lambda-Ausdrücken und anonymen Methoden:

  • CS0407: "method" hat den falschen Rückgabetyp.
  • CS0428: Die Methodengruppe 'Identifier' kann nicht in den nicht Delegat-Typ 'type' konvertiert werden. Wollten Sie die Methode aufrufen?
  • CS0748: Inkonsistente Lambda-Parameterverwendung; Parametertypen müssen alle expliziten oder alle impliziten Sein.
  • CS0815: Einer implizit typierten Variablen kann kein "Ausdruck" zugewiesen werden.
  • CS0828: Kann 'Ausdruck' nicht einer Eigenschaft eines anonymen Typs zuweisen.
  • CS0837: Der erste Operand eines "is"- oder "as"-Operators ist möglicherweise kein Lambda-Ausdruck, keine anonyme Methode oder Methodengruppe.
  • CS1065: Standardwerte sind in diesem Kontext ungültig.
  • CS1621: Die yield-Anweisung kann nicht in einer anonymen Methode oder einem Lambda-Ausdruck verwendet werden.
  • CS1628: Parameter inref oder out können nicht innerhalb einer anonymen Methode, eines Lambda-Ausdrucks oder eines Abfrageausdrucks verwendet werden.
  • CS1632: Kontrolle kann den Block einer anonymen Methode oder eines Lambda-Ausdrucks nicht verlassen.
  • CS1643: Nicht alle Codepfade geben einen Wert in anonymer Methode vom Typ 'type' zurück.
  • CS1660: Der Lambda-Ausdruck kann nicht in den Typ "Type" konvertiert werden, da es sich nicht um einen Delegattyp handelt.
  • CS1661: Der anonyme Methodenblock kann nicht in den Typ "type" konvertiert werden, da die Parametertypen nicht mit den Stellvertretungsparametertypen übereinstimmen.
  • CS1662: Anonymer Methodenblock kann nicht in den vorgesehenen Delegattyp konvertiert werden, da einige der Rückgabetypen im Block nicht implizit in den Rückgabetyp des Delegaten konvertiert werden.
  • CS1673: Anonyme Methoden, Lambdaausdrücke und Abfrageausdrücke innerhalb von Strukturen können nicht auf Instanzmmelemente von "this" zugreifen.
  • CS1676: Der Parameter "number" muss mit dem Schlüsselwort "Schlüsselwort" deklariert werden.
  • CS1677: Der Parameter "number" darf nicht mit dem Schlüsselwort 'keyword' deklariert werden.
  • CS1678: Parameter 'number' wird als Typ 'type1' deklariert, sollte aber 'type2' sein.
  • CS1686: Die Adresse einer lokalen Variable oder ihrer Elemente kann nicht ermittelt und innerhalb einer anonymen Methode oder eines Lambda-Ausdrucks verwendet werden.
  • CS1688: Anonymer Methodenblock kann nicht ohne Parameterliste in Delegatentyp 'delegate' konvertiert werden, da er mindestens einen 'out'-Parameter aufweist.
  • CS1706: Ausdruck darf keine anonymen Methoden oder Lambda-Ausdrücke enthalten.
  • CS1731: Der Ausdruck kann nicht in einen Delegaten konvertiert werden, da einige der Rückgabetypen im Block nicht implizit in den Rückgabetyp des Delegaten konvertiert werden können.
  • CS1732: Erwarteter Parameter.
  • CS1764: Innerhalb einer anonymen Methode, eines Lambda-Ausdrucks oder eines Abfrageausdrucks kann keine feste lokale Version verwendet werden.
  • CS8030: Anonyme Funktion, die in einen ungültigen Rückgabedelegat konvertiert wurde, kann keinen Wert zurückgeben.
  • CS8175: Ref local kann nicht innerhalb einer anonymen Methode, eines Lambda-Ausdrucks oder eines Abfrageausdrucks verwendet werden.
  • CS8820: Eine statische anonyme Funktion kann keinen Verweis auf "Variable" enthalten.
  • CS8821: Eine statische anonyme Funktion kann keinen Verweis auf "this" oder "base" enthalten.
  • CS8916: Attribute für Lambda-Ausdrücke erfordern eine Klammerparameterliste.
  • CS8917: Der Delegattyp konnte nicht abgeleitet werden.
  • CS8934: Die anonyme Methode kann nicht in den Typ "type" konvertiert werden, da der Rückgabetyp nicht mit dem Rückgabetyp des Delegaten übereinstimmt.
  • CS8975: Das Kontextschlüsselwort var kann nicht als expliziter Lambda-Rückgabetyp verwendet werden.
  • CS9098: Implizit eingegebener Lambda-Parameter '...' kann keinen Standardwert haben.

Darüber hinaus beziehen sich mehrere Warnungen auf das Deklarieren und Verwenden von Lambda-Ausdrücken:

  • CS0467: Mehrdeutigkeit zwischen Methode 'Method' und Nicht-Methode 'Non-Method'. Verwendung der Methodengruppe.
  • CS1911: Der Zugriff auf ein Mitglied mithilfe eines 'base'-Schlüsselworts aus einer anonymen Methode, Lambda-Ausdruck, Abfrageausdruck oder Iterator, führt zu nicht verifizierbarem Code.
  • CS8971: InterpolatedStringHandlerArgument hat keine Auswirkung, wenn sie auf Lambda-Parameter angewendet wird und an der Aufrufwebsite ignoriert wird.
  • CS8974: Konvertierung der Methodengruppe 'method' in den Nicht-Delegat-Typ 'type'. Wollten Sie die Methode aufrufen?
  • CS9099: Der Standardwert des Parameters stimmt nicht mit dem Zieldelegattyp überein.
  • CS9100: Parameter verfügt über einen Paramsmodifizierer in Lambda, aber nicht im Zieldelegattyp.

Der Compiler erzeugt auch die folgende Informationsmeldung :

  • CS9236: Für die Kompilierung muss der Lambda-Ausdruck mindestens einige Male zugewiesen werden. Erwägen Sie, den Lambda-Ausdruck mit expliziten Parametertypen zu deklarieren. Wenn der enthaltene Methodenaufruf generisch ist, sollten Sie die Verwendung expliziter Typargumente in Betracht ziehen.

Syntaxbeschränkungen in Lambda-Ausdrücken

  • CS0837: Der erste Operand eines is Oder as Operators ist möglicherweise kein Lambda-Ausdruck, eine anonyme Methode oder eine Methodengruppe.
  • CS1621: Die yield Anweisung kann nicht innerhalb einer anonymen Methode oder eines Lambda-Ausdrucks verwendet werden.
  • CS1628: Kann den Parameter in, ref oder out nicht innerhalb einer anonymen Methode, eines Lambda-Ausdrucks oder eines Abfrageausdrucks verwenden.
  • CS1632: Steuerung kann den Körper einer anonymen Methode oder eines Lambda-Ausdrucks nicht verlassen.
  • CS1673: Anonyme Methoden, Lambdaausdrücke und Abfrageausdrücke innerhalb von Strukturen können nicht auf Instanzmmelemente von thiszugreifen.
  • CS1686: Die Adresse einer lokalen Variable oder ihrer Elemente kann nicht ermittelt und innerhalb einer anonymen Methode oder eines Lambda-Ausdrucks verwendet werden.
  • CS1706: Ausdruck darf keine anonymen Methoden oder Lambda-Ausdrücke enthalten.
  • CS1764: Innerhalb einer anonymen Methode, eines Lambda-Ausdrucks oder eines Abfrageausdrucks kann keine feste lokale Version verwendet werden.
  • CS1911: Warnung: Der Zugriff auf Member über ein "base"-Schlüsselwort aus einer anonymen Methode, einem Lambda-Ausdruck, einem Abfrageausdruck oder einem Iterator führt zu nichtifizierbarem Code.
  • CS8175: Ref local kann nicht innerhalb einer anonymen Methode, eines Lambda-Ausdrucks oder eines Abfrageausdrucks verwendet werden.
  • CS8820: Eine statische anonyme Funktion kann keinen Verweis auf "Variable" enthalten.
  • CS8821: Eine statische anonyme Funktion kann keinen Verweis auf "this" oder "base" enthalten.
  • CS8971: Warnung: InterpolatedStringHandlerArgument hat keine Auswirkung, wenn sie auf Lambda-Parameter angewendet wird und an der Aufrufwebsite ignoriert wird.
  • CS9236: Informational: Kompilieren erfordert, dass der Lambda-Ausdruck mindestens die angegebene Anzahl an Malen gebunden wird. Erwägen Sie, den Lambda-Ausdruck unter Angabe von expliziten Parametertypen zu deklarieren, oder wenn der enthaltende Methodenaufruf generisch ist, erwägen Sie die Angabe expliziter Typargumente.

Der Compiler verbietet bestimmte C#-Konstrukte innerhalb von Lambda-Ausdrücken und anonymen Methoden. Diese Einschränkungen bestehen, da der Compiler Lambdas und anonyme Methoden in Stellvertretungsaufrufe oder Ausdrucksstrukturen transformiert und einige Konstrukte in diesen Formularen nicht dargestellt werden können. Weitere Informationen finden Sie im Abschnitt " Anonyme Funktionsausdrücke" der C#-Spezifikation.

Sie können diese Fehler beheben, indem Sie die folgenden Anleitungen verwenden:

  • Verschieben Sie beliebige yield return oder yield break Anweisungen aus dem Körper der Lambdafunktion in die umgebende Iteratormethode, oder konvertieren Sie die Lambdafunktion in eine lokale Funktion, die yield Anweisungen unterstützt (CS1621).
  • Vermeiden Sie es, innerhalb des Lambda-Textes auf die Parameter in, ref oder out der umgebenden Methode zu verweisen. Wenn die Lambda-Funktion diese Parameter als Teil einer Schließung erfasst, kann die Referenzsemantik von ref-like-Parametern nicht beibehalten werden. Kopieren Sie den Wert in eine lokale Variable, und verwenden Sie diese stattdessen lokal, oder konvertieren Sie die Lambda-Funktion in eine lokale Funktion (CS1628).
  • Entfernen Sie alle Anweisungen break, goto oder continue, die die Steuerung aus dem Lambda-Text herausführen. Steuerungsflussanweisungen müssen Bezeichnungen oder Schleifen innerhalb desselben Lambda-Körpers (CS1632) anvisieren.
  • Vermeiden Sie bei einem Typ struct die Referenzierung von Instanzmembern über this innerhalb eines Lambda-Ausdrucks, einer anonymen Methode oder eines Abfrageausdrucks. Da der Compiler this als Wert in einer struct erfasst, wirken sich Mutationen innerhalb der Lambda nicht auf die ursprüngliche Instanz aus. Extrahieren Sie die benötigten Elementwerte vor dem Lambda-Ausdruck in lokale Variablen oder wandeln Sie ihn in eine lokale Funktion um, die direkt auf this zugreifen kann (CS1673).
  • Verwenden Sie nicht die Adresse einer lokalen Variablen, die auch von der Lambda-Funktion erfasst wird. Der Compiler verschiebt erfasste Variablen in ein heap-zugeordnetes Schließobjekt, wodurch ihre Adresse instabil wird. Trennen Sie die Adressaufnahmelogik von der Lambda-Funktion, oder verwenden Sie stattdessen eine lokale Funktion (CS1686).
  • Verschieben Sie den Lambda-Ausdruck oder die anonyme Methode aus dem übergeordneten Ausdruck heraus, der dies verhindert. Einige Ausdrücke, z. B. Attributkonstruktoren, unterstützen keine Lambda-Ausdrücke oder anonyme Methoden als Argumente (CS1706).
  • Verwenden Sie keine lokale Variable innerhalb eines Lambdakörpers. Die Pinning-Garantie der fixed-Anweisung umgebenden Gültigkeitsbereich, nicht für die vom Compiler erzeugte Closure (CS1764).
  • Verwenden Sie kein ref local innerhalb eines Lambda-Textes. Wie ref-Parameter können auch ref locals nicht in der vom Compiler für das Lambda generierten Closure erfasst werden. Weisen Sie den Wert einer nichtref lokalen Variablen zu, oder konvertieren Sie die Lambda-Funktion in eine lokale Funktion (CS8175).
  • Verwenden Sie keinen Lambda-Ausdruck, keine anonyme Methode und keine Methodengruppe als ersten Operanden des is- oder as-Operators. Diese Konstrukte verfügen nicht über einen Typ, der zur Laufzeit getestet werden kann. Weisen Sie den Ausdruck zuerst einer Variablen zu, und testen Sie dann die Variable (CS0837).
  • Entfernen Sie den static Modifizierer aus der Lambda-Funktion, oder entfernen Sie den Verweis auf die erfasste Variable. Ein static lambda verbietet ausdrücklich die Erfassung von lokalen Variablen, Parametern oder this, um unbeabsichtigte Closure-Zuweisungen zu vermeiden. Wenn Sie auf äußere Variablen verweisen müssen, entfernen Sie den static Modifizierer. Wenn Sie die Heap-Zuordnung minimal beibehalten möchten, übergeben Sie die Werte als Parameter an die Lambda-Funktion (CS8820, CS8821).
  • Entfernen Sie den InterpolatedStringHandlerArgumentAttribute Parameter aus dem Lambda-Parameter, oder verschieben Sie die Logik in eine Methode, in der das Attribut berücksichtigt wird. Der Compiler ignoriert dieses Attribut für Lambdaparameter, da Lambda-Aufrufe nicht die gleiche Reduzierung über den interpolierten String-Handler wie reguläre Methodenaufrufe verwenden (CS8971).
  • Vermeiden Sie das Aufrufen eines virtuellen Mitglieds über das base Schlüsselwort innerhalb einer Lambda- oder anonymen Methode. Der Compiler generiert einen nicht virtuellen Aufruf über eine Hilfsmethode, wodurch unverifizierbarer Code erzeugt wird. Erwägen Sie, den base Aufruf in eine separate Methode zu extrahieren und diese Methode stattdessen aus der Lambda-Funktion (CS1911) aufzurufen.
  • Verringern Sie die Komplexität von überladenen Methodenaufrufen, die Lambda-Ausdrücke akzeptieren, oder fügen Sie explizite Typinformationen hinzu. Wenn der Compiler einen Lambda-Ausdruck mehrmals binden muss, um Überladungen aufzulösen, gibt er diese informationsbezogene Diagnose aus. Wenn Sie die Lambda-Funktion mit expliziten Parametertypen deklarieren oder explizite Typargumente für den generischen Methodenaufruf bereitstellen, wird die Anzahl der Bindungsdurchläufe reduziert, die der Compiler ausführen muss (CS9236).

Lambda-Ausdrucksparameter und -Rückgaben

  • CS0748: Inkonsistente Lambda-Parameterverwendung; Parametertypen müssen alle expliziten oder alle impliziten Sein.
  • CS1065: Standardwerte sind in diesem Kontext ungültig.
  • CS1643: Nicht alle Codepfade geben einen Wert in anonymer Methode vom Typ 'type' zurück.
  • CS1661: Der anonyme Methodenblock kann nicht in den Typ "type" konvertiert werden, da die Parametertypen nicht mit den Stellvertretungsparametertypen übereinstimmen.
  • CS1662: Anonymer Methodenblock kann nicht in den vorgesehenen Delegattyp konvertiert werden, da einige der Rückgabetypen im Block nicht implizit in den Rückgabetyp des Delegaten konvertiert werden.
  • CS1676: Der Parameter "number" muss mit dem Schlüsselwort "keyword" deklariert werden.
  • CS1677: Der Parameter 'number' sollte nicht mit dem Schlüsselwort 'keyword' deklariert werden.
  • CS1678: Parameter 'number' wird als Typ 'type1' deklariert, sollte aber 'type2' sein.
  • CS1688: Anonymer Methodenblock ohne Parameterliste kann nicht in den Delegattyp 'delegate' konvertiert werden, da er einen oder mehrere out-Parameter aufweist.
  • CS1731: Der Ausdruck kann nicht in einen Delegaten konvertiert werden, da einige der Rückgabetypen im Block nicht implizit in den Rückgabetyp des Delegaten konvertiert werden können.
  • CS1732: Erwarteter Parameter.
  • CS8030: Anonyme Funktion, die in einen ungültigen Rückgabedelegat konvertiert wurde, kann keinen Wert zurückgeben.
  • CS8916: Attribute für Lambda-Ausdrücke erfordern eine Klammerparameterliste.
  • CS8934: Die anonyme Methode kann nicht in den Typ "type" konvertiert werden, da der Rückgabetyp nicht mit dem Rückgabetyp des Delegaten übereinstimmt.
  • CS8975: Das kontextbezogene Schlüsselwort "var" kann nicht als expliziter Lambda-Rückgabetyp verwendet werden.
  • CS9098: Ein implizit typisierter Lambda-Parameter '...' kann keinen Standardwert haben.

Diese Fehler deuten auf ein Problem mit einem Lambda-Ausdrucksparameter oder auf eine Rückgabetypdeklaration hin. Die vollständigen Regeln für Lambda-Parameter und Rückgabetypen finden Sie im Abschnitt "Lambda-Ausdrücke", "anonyme Methoden" und im Abschnitt " Anonyme Funktionsausdrücke" der C#-Spezifikation.

Hinweis

CS1731 und CS1732 werden nicht mehr von der aktuellen Version des C#-Compilers (Roslyn) erstellt. Diese werden möglicherweise angezeigt, wenn Sie eine ältere Compilerversion verwenden.

Sie können diese Fehler beheben, indem Sie die folgenden Anleitungen verwenden:

  • Stellen Sie sicher, dass alle Parameter in einem Lambda-Ausdruck dieselbe Typisierungsart verwenden. Wenn eine Lambda-Funktion mehrere Parameter enthält, muss jeder Parameter entweder explizit eingegeben oder implizit eingegeben werden. Sie können die beiden Formatvorlagen nicht in derselben Parameterliste (CS0748) kombinieren.
  • Fügen Sie explizite Typen zu allen Lambda-Parametern hinzu, die über einen Standardwert verfügen. Der Compiler erfordert explizite Typen für Parameter mit Standardwerten, da er einen benutzerdefinierten Delegattyp generieren muss, der den Standardwert codiert. Implizit eingegebene Parameter stellen nicht genügend Informationen für den Compiler bereit, um diesen Delegattyp zu erstellen (CS1065, CS9098).
  • Entfernen Sie Standardparameterwerte aus anonymen Methoden, die mithilfe des delegate Operators deklariert werden. Standardwerte werden nur in Lambda-Ausdrücken unterstützt, nicht in anonymen Methoden. Konvertieren Sie die anonyme Methode in einen Lambda-Ausdruck, wenn Sie Standardwerte (CS1065) benötigen.
  • Passen Sie die Parametertypen, ref/out/in Modifizierer und die Parameteranzahl der Lambda- oder anonymen Methode an den Zieldelegattyp an. Der Compiler führt eine genaue Übereinstimmung von Parametersignaturen durch, wenn eine anonyme Funktion in einen Delegaten konvertiert wird: Jeder Parameter muss über den richtigen Typ verfügen, und jeder ref, , outoder in modifizierer muss genau vorhanden sein, wenn die Stellvertretung sie erwartet (CS1661, CS1676, CS1677, CS1678).
  • Fügen Sie der anonymen Methode eine Parameterliste hinzu, wenn der Ziel-Delegattyp out-Parameter hat. Eine anonyme Methode, die ohne eine Parameterliste (mithilfe der delegate { } Syntax) deklariert wird, kann mit den meisten Delegattypen übereinstimmen, der Compiler kann jedoch nicht implizit die erforderlichen out Parameter synthetisieren. Deklarieren Sie die Parameter explizit, um mit der Stellvertretungssignatur (CS1688) übereinzugleichen.
  • Stellen Sie sicher, dass alle Codepfade in der Lambda- oder anonymen Methode einen Wert zurückgeben, wenn der Ziel-Delegattyp einen Rückgabetyp hat, der nicht vom Typ „void“ ist. Jeder Zweig im Programm muss einen Rückgabewert erzeugen, der implizit in den Rückgabetyp des Delegaten konvertierbar ist (CS1643, CS1662, CS1731, CS8934).
  • Entfernen Sie alle return-Anweisungen mit einem Wert aus einer Lambda- oder anonymen Methode, die einem Delegattyp zugewiesen ist, der void zurückgibt, wie beispielsweise Action. Da der Rückgabetyp des Delegaten void ist, kann der Text keinen Wert zurückgeben (CS8030).
  • Schließen Sie die Parameterliste in Klammern ein, wenn Attribute auf einen lambda-Parameter angewendet werden. Der Compiler benötigt das klammerte Formular, um die Attributsyntax von anderen Ausdrücken zu unterscheiden. Schreiben Sie z. B. ([MyAttribute] int x) => x anstelle von [MyAttribute] x => x (CS8916).
  • Verwenden Sie einen bestimmten Typnamen anstelle von var als expliziten Rückgabetyp für einen Lambda-Ausdruck. Das Schlüsselwort var ist für implizit eingegebene lokale Variablen reserviert und kann nicht als Lambda-Rückgabetypanmerkung verwendet werden. Geben Sie den tatsächlichen Rückgabetyp an, oder lassen Sie ihn vom Compiler ableiten (CS8975).
  • Korrigieren Sie die Parameterliste, damit der Compiler sie als gültige Parameterdeklaration erkennen kann. Dieser Fehler gibt eine falsch formatierte Parameterliste an, in der der Compiler einen Parameterbezeichner erwartet, aber etwas anderes gefunden hat (CS1732).

Lambdaausdrucks-Delegattyp

  • CS0407: "method" hat den falschen Rückgabetyp.
  • CS0428: Die Methodengruppe 'Identifier' kann nicht in den nicht Delegat-Typ 'type' konvertiert werden. Wollten Sie die Methode aufrufen?
  • CS0467: Warnung: Mehrdeutigkeit zwischen Methode 'Method' und Nicht-Methode 'Non-Method'. Verwendung der Methodengruppe.
  • CS0815: Einer implizit typierten Variablen kann kein "Ausdruck" zugewiesen werden.
  • CS0828: "Expression" kann nicht der Eigenschaft eines anonymen Typs zugewiesen werden.
  • CS1660: Der Lambda-Ausdruck kann nicht in den Typ "Type" konvertiert werden, da es sich nicht um einen Delegattyp handelt.
  • CS8917: Der Delegattyp konnte nicht abgeleitet werden.
  • CS8974: Warnung: Konvertierung der Methodengruppe 'method' in den Nicht-Delegatentyp 'type'. Wollten Sie die Methode aufrufen?
  • CS9099: Warnung: Der Standardwert des Parameters stimmt nicht mit dem Zieldelegattyp überein.
  • CS9100: Warnung: Der Parameter verfügt über einen Paramsmodifizierer in Lambda, jedoch nicht im Zieldelegattyp.

Diese Fehler weisen auf ein Problem mit dem Delegattyp hin, den der Compiler für einen Lambda-Ausdruck, eine anonyme Methode oder Methodengruppe ableitet oder erwartet. Die vollständigen Regeln für Stellvertretungskonvertierungen finden Sie unter Lambda-Ausdrücke, anonyme Methoden und den Abschnitt " Anonyme Funktionsausdrücke" der C#-Spezifikation.

Hinweis

Die aktuelle Version des C#-Compilers (Roslyn) erzeugt nicht CS0467. Dieser Fehler wird möglicherweise angezeigt, wenn Sie eine ältere Compilerversion verwenden.

Sie können diese Fehler beheben, indem Sie die folgenden Anleitungen verwenden:

  • Stellen Sie sicher, dass der Zieltyp der Zuweisung oder Konvertierung ein Delegattyp oder System.Linq.Expressions.Expression ist. Ein Lambda-Ausdruck oder eine anonyme Methode kann keinem Nichtdelegattyp wie object oder einer Schnittstelle zugewiesen werden. Ändern Sie den Typ der Variablen in einen kompatiblen Delegattyp wie Func<> oder Action<>, oder verwenden Sie var, damit der Compiler den Delegattyp ableiten kann (CS1660).
  • Stellen Sie genügend Kontext für den Compiler bereit, um einen einzelnen Delegattyp für den Lambda-Ausdruck zu ermitteln. Wenn er zugewiesen ist var, benötigt der Compiler einen eindeutigen Rückgabetyp und eine Parameterliste. Bei der Zuweisung an eine Eigenschaft eines anonymen Typs kann der Compiler den Delegattyp überhaupt nicht ableiten. Weisen Sie die Lambda-Funktion einer Variablen mit einem expliziten Delegattyp zu, und verwenden Sie diese Variable dann im anonymen Typinitialisierer (CS0815, CS0828, CS8917).
  • Passen Sie den Rückgabetyp der Methodengruppe an den deklarierten Rückgabetyp des Delegaten an. Bei einer Methodengruppenkonvertierung muss der Rückgabetyp einer Methode entweder direkt identitätskonvertierbar sein oder implizit in den Rückgabetyp des Delegaten konvertiert werden können. Ändern Sie den Rückgabetyp der Methode, oder ändern Sie den Stellvertretungstyp entsprechend (CS0407).
  • Rufen Sie die Methode auf, anstatt die Methodengruppe zuzuweisen, wenn der Zieltyp kein Delegat ist. Wenn der Zieltyp string oder int oder ein anderer Nichtdelegattyp ist, haben Sie wahrscheinlich beabsichtigt, die Methode aufzurufen und ihr Ergebnis zuzuweisen. Fügen Sie Klammern und Argumente hinzu, um die Methode aufzurufen (CS0428, CS8974).
  • Beheben Sie Mehrdeutigkeiten zwischen einem Methoden- und einem Nicht-Methoden-Mitglied, die den gleichen Namen haben. Benennen Sie eines der in Konflikt stehenden Mitglieder um oder verwenden Sie einen vollqualifizierten Verweis, um die Mehrdeutigkeit (CS0467) zu entfernen.
  • Entfernen Sie den Standardparameterwert oder params Modifizierer aus der Lambda-Funktion, wenn der Zieldelegattyp ein Standard Func<> oder Action<> Typ ist. Standardwerte und params-Modifizierer bewirken, dass der Compiler einen benutzerdefinierten Delegattyp generiert, der nicht mit Func<> oder Action<> übereinstimmt. Verwenden Sie entweder var, damit der Compiler den richtigen Delegattyp synthetisiert, oder entfernen Sie den Standardwert oder den params-Modifizierer, damit der Lambda-Ausdruck dem deklarierten Delegattyp entspricht (CS9099, CS9100).