Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 "Bezeichner" kann nicht in den Nicht-Delegat-Typ "type" konvertiert werden. Hatten Sie vor, die Methode aufzurufen?
- CS0748: Inkonsistente Lambda-Parameterverwendung; Parametertypen müssen alle expliziten oder alle impliziten Sein.
- CS0815: Einer implizit typierten Variablen kann kein "Ausdruck" zugewiesen werden.
- CS0828: Der anonymen Typeigenschaft kann "Ausdruck" nicht zugewiesen werden.
- 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
inrefoderoutkö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: Lokale Variable oder ihre Member können nicht, wenn ihre Adresse übernommen wird, 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: Ausdruck kann nicht in Delegat konvertiert werden, da einige der Rückgabetypen im Block nicht implizit auf den Rückgabetyp des Delegaten abgebildet 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
varkann 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 "Methode" und Nicht-Methode "non-method". Verwenden 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: Konvertieren der Methodengruppe "Methode" in den Nicht-Delegatentyp "type". Möchten 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
isOderasOperators ist möglicherweise kein Lambda-Ausdruck, eine anonyme Methode oder eine Methodengruppe. -
CS1621: Die
yieldAnweisung kann nicht innerhalb einer anonymen Methode oder eines Lambda-Ausdrucks verwendet werden. -
CS1628: Kann den Parameter
in,refoderoutnicht 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: Lokale Variablen oder ihre Member dürfen ihre Adresse nicht abgerufen haben 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 returnoderyield breakAnweisungen aus dem Körper der Lambdafunktion in die umgebende Iteratormethode, oder konvertieren Sie die Lambdafunktion in eine lokale Funktion, dieyieldAnweisungen unterstützt (CS1621). - Vermeiden Sie das Referenzieren der Parameter
in,refoderoutder umschließenden Methode im Lambda-Körper. Wenn die Lambda-Funktion diese Parameter als Teil einer Schließung erfasst, kann die Referenzsemantik vonref-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
break,gotoodercontinueAnweisungen, die die Kontrolle aus dem Lambda-Körper herausführen. Steuerungsflussanweisungen müssen Bezeichnungen oder Schleifen innerhalb desselben Lambda-Körpers (CS1632) anvisieren. - Vermeiden Sie bei einem Typ
structdie Referenzierung von Instanzmembern überthisinnerhalb eines Lambda-Ausdrucks, einer anonymen Methode oder eines Abfrageausdrucks. Da der Compilerthisals Wert in einerstructerfasst, wirken sich Mutationen innerhalb der Lambda nicht auf die ursprüngliche Instanz aus. Extrahieren Sie die erforderlichen Memberwerte vor der Lambda-Funktion in lokale Variablen, oder konvertieren Sie sie in eine lokale Funktion, auf die direkt zugegriffenthiswerden 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 enthaltenden Ausdruck, der ihn verbietet. 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 Pinninggarantie der
fixedAnweisung gilt nur für den eingeschlossenen Bereich, nicht für das Schließen, das der Compiler generiert (CS1764). - Verwenden
refSie kein lokales Element in einem Lambda-Textkörper. WierefParameter könnenreflokale Variablen nicht in der Closure erfasst werden, die der Compiler für das Lambda generiert. Weisen Sie den Wert einer nichtreflokalen 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- oderas-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
staticModifizierer aus der Lambda-Funktion, oder entfernen Sie den Verweis auf die erfasste Variable. EinestaticLambda-Funktion verbietet explizit die Erfassung lokaler Variablen, Parameter oderthisdie Vermeidung unbeabsichtigter Schließungszuweisungen. Wenn Sie auf äußere Variablen verweisen müssen, entfernen Sie denstaticModifizierer. 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
baseSchlü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, denbaseAufruf 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
delegateOperators 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/inModifizierer 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 jederref, ,outoderinmodifizierer muss genau vorhanden sein, wenn die Stellvertretung sie erwartet (CS1661, CS1676, CS1677, CS1678). - Fügen Sie der anonymen Methode eine Parameterliste hinzu, wenn der Zieldelegattyp Parameter enthält
out. Eine anonyme Methode, die ohne eine Parameterliste (mithilfe derdelegate { }Syntax) deklariert wird, kann mit den meisten Delegattypen übereinstimmen, der Compiler kann jedoch nicht implizit die erforderlichenoutParameter 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 Zieldelegattyp über einen nicht ungültigen Rückgabetyp verfügt. Jede Verzweigung durch den Codeblock muss einen Rückgabewert erzeugen, der implizit in den Rückgabetyp des Delegaten (CS1643, CS1662, CS1731, CS8934) konvertierbar ist.
- Entfernen Sie eine Anweisung
return, die aus einer Lambda- oder anonymen Methode mit einem Wert stammt und einemvoid-Typ zugewiesen ist, der einen Rückgabewert liefert, wie z.B.Action. Da der Rückgabetyp der Stellvertretung lautetvoid, kann der Textkörper keinen Wert (CS8030) zurückgeben. - 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) => xanstelle von[MyAttribute] x => x(CS8916). - Verwenden Sie einen bestimmten Typnamen anstelle von
varals expliziten Rückgabetyp für einen Lambda-Ausdruck. Das Schlüsselwortvarist 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).
Lambda-Ausdrucksdelegattyp
- CS0407: "method" hat den falschen Rückgabetyp.
- CS0428: Die Methodengruppe "Bezeichner" kann nicht in den nicht-Delegat-Typ "type" konvertiert werden. Meinten Sie, die Methode aufzurufen?
- CS0467: Warnung: Mehrdeutigkeit zwischen Methode 'Methode' und Nicht-Methode 'Nicht-Methode'. Methodengruppe verwenden.
- 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: Konvertieren der Methodengruppe "Methode" in den Nicht-Delegaten-Typ "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 deuten auf ein Problem mit dem Delegattyp hin, den der Compiler ableiten oder für einen Lambda-Ausdruck, eine anonyme Methode oder eine Methodengruppe 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
objectoder einer Schnittstelle zugewiesen werden. Ändern Sie den Typ der Variablen in einen kompatiblen Delegattyp wieFunc<>oderAction<>, oder verwendenvarSie den Compiler, um den Delegattyp (CS1660) abzuleiten. - 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. Wenn sie einer anonymen Typeigenschaft zugewiesen ist, kann der Compiler überhaupt keinen Delegattyp 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
stringoderintoder 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). - Auflösen der Mehrdeutigkeit zwischen einer Methode und einem Nicht-Methodenmemmemm, der denselben Namen aufweist. 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
paramsModifizierer aus der Lambda-Funktion, wenn der Zieldelegattyp ein StandardFunc<>oderAction<>Typ ist. Standardwerte undparams-Modifizierer bewirken, dass der Compiler einen benutzerdefinierten Delegattyp generiert, der nicht mitFunc<>oderAction<>übereinstimmt. Verwenden Sie entwedervar, damit der Compiler den richtigen Delegattyp synthetisiert, oder entfernen Sie den Standardwert oder denparams-Modifizierer, damit der Lambda-Ausdruck dem deklarierten Delegattyp entspricht (CS9099, CS9100).