Ich verstehe nicht, warum TestDelegateStatement3
funktioniert, aber TestDelegateStatement1
schlägt fehl. In beiden Fällen wird Action
mit einer Methode geliefert, die null Parameter akzeptiert. Sie können eine Methode aufrufen, die einen einzelnen Parameter ( aString
) verwendet, aber das sollte irrelevant sein. Sie nehmen keinen Parameter. Ist das nicht möglich mit Lambda-Ausdrücken oder mache ich etwas falsch?
Wie Sie gesagt haben, nimmt Action keine Parameter an. Wenn Sie dies tun:
%Vor%Sie führen die Methode hier tatsächlich aus, das ist also kein Methodenparameter.
wenn Sie dies tun:
%Vor% Sie sagen, dass Ihre Methode einen Parameter namens param
benötigt, was die Aktion nicht tut.
Der richtige Weg wäre also:
%Vor%oder kompakter:
%Vor%Die leeren Klammern zeigen an, dass das Lambda keine Parameter annimmt.
Ich bin kein Experte dafür, aber haben Sie das schon versucht?
%Vor% Action
Delegat ist als Delegat für die Methode definiert, die keine Parameter hat und void zurückgibt. In Probe 1 machen Sie 2 Fehler:
1. Sie versuchen, eine Methode anzugeben, die den Parameter | übernimmt
2. Sie rufen die Methode auf und geben sie nicht als Parameter an (sie sollte eine neue Action (methodName) sein), obwohl sie wegen 1. nicht funktionieren würde.
In Beispiel 2 machen Sie denselben Fehler erneut, Ihr Lambda nimmt einen Parameter, Sie sollten es so schreiben:
new Action(() => StringAction("a string"));
Wenn Sie einen Delegaten erstellen wollen, der einen Parameter braucht, sollten Sie es so machen:
new Action<string>(myStringParam => StringAction(myStringParam));
In Ihrem Fall würde der vollständige Code so aussehen:
%Vor% In C # 2.0 ist der Action
-Delegat ein void
-Delegat, der keine Parameter akzeptiert.
In späteren Versionen gibt es den generischen Action<T>
-Delegaten, wobei T den Parametertyp angibt.
Das sollte funktionieren:
%Vor%oder noch besser:
%Vor%Dann können Sie
anrufen %Vor%