Warum kann ich in einer Methode, die einen Delegaten erwartet, keine Aktion in einer Zeile definieren?

7

Wenn ich den folgenden MSDN-Beispielcode verwende, kann ich den Action-Delegaten nicht "inline" definieren:

%Vor%

... also "Inline" wie:

%Vor%

Danke,

Scott

    
Scott Davies 05.07.2010, 13:00
quelle

4 Antworten

13

Dies ist nicht gültig C #:

%Vor%

Tun Sie dies stattdessen:

%Vor%     
Tim Robinson 05.07.2010, 13:05
quelle
4

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.

    
Jon Skeet 05.07.2010 13:05
quelle
2

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%     
Quartermeister 05.07.2010 13:06
quelle
1

Ich würde es nicht wissen, aber ich denke, Sie können es tun:

%Vor%     
Anton 05.07.2010 13:03
quelle

Tags und Links