Confusion über 'Action' Delegate und Lambda-Ausdrücke

8
%Vor%

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?

    
devuxer 05.09.2009, 10:15
quelle

4 Antworten

18

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.

    
Botz3000 05.09.2009, 10:20
quelle
4

Ich bin kein Experte dafür, aber haben Sie das schon versucht?

%Vor%     
Tomas Lycken 05.09.2009 10:19
quelle
4

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%     
Marcin Deptuła 05.09.2009 10:21
quelle
2

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%     
Igal Tabachnik 05.09.2009 10:18
quelle

Tags und Links