Wenn ich den folgenden MSDN-Beispielcode verwende, kann ich den Action-Delegaten nicht "inline" definieren:
%Vor%... also "Inline" wie:
%Vor%Danke,
Scott
Dies ist nicht gültig C #:
%Vor%Tun Sie dies stattdessen:
%Vor%Sie versuchen, eine Variable innerhalb eines Methodenaufrufs zu delegieren. Es genügt, die Variablendeklaration zu entfernen:
%Vor% Hier wird die Action
nicht aus dem Lambda-Ausdruck selbst abgeleitet, sondern aus dem Methodenaufruf, den sie zu machen versucht. Die normale Überladungsauflösung wird ausgeführt, und der Compiler versucht, den Lambda-Ausdruck in den relevanten Parametertyp zu konvertieren. Wenn der Parametertyp nur Delegate
wäre (z. B. Control.Invoke
), würde die Typinferenz fehlschlagen, weil der Compiler keine konkreten Zieltypen hat, in die zu konvertieren versucht wird.
Wenn das nicht funktioniert (ich kann es nicht einfach atm testen), dann brauchen Sie nur eine Umwandlung, um zu sagen, welcher Delegattyp der Lambda-Ausdruck konvertiert werden soll:
%Vor%Um ehrlich zu sein, würde ich an dieser Stelle lieber eine separate Variable für die Lesbarkeit sehen.
Sie fügen die Deklarationsanweisung ein, die kein rechtlicher Ausdruck ist. Probieren Sie:
%Vor%Wenn Sie eine API aufrufen, bei der der Typ des Delegaten nicht abgeleitet werden kann, können Sie eine Umwandlung verwenden oder den Delegate-Konstruktor explizit aufrufen:
%Vor%