private void StringAction(string aString) // method to be called
{
return;
}
private void TestDelegateStatement1() // doesn't work
{
var stringAction = new System.Action(StringAction("a string"));
// Error: "Method expected"
}
private void TestDelegateStatement2() // doesn't work
{
var stringAction = new System.Action(param => StringAction("a string"));
// Error: "System.Argument doesn't take 1 arguments"
stringAction();
}
private void TestDelegateStatement3() // this is ok
{
var stringAction = new System.Action(StringActionCaller);
stringAction();
}
private void StringActionCaller()
{
StringAction("a string");
}
Ich verstehe nicht, warum TestDelegateStatement3
funktioniert, aber TestDelegateStatement1
versagt. In beiden Fällen wird Action
mit einer Methode geliefert, die Null Parameter akzeptiert. Sie können Aufruf eine Methode, die einen einzigen Parameter (aString
), aber das sollte irrelevant sein. Sie nehmen keinen Parameter. Ist das mit Lamda-Ausdrücken nicht möglich, oder mache ich etwas falsch?Verwirrung über `Action` Delegaten und Lambda-Ausdrücke
@Botz:
new Action<string>(myStringParam => StringAction(myStringParam));
Also, in Ihrem Fall vollständiger Code würde wie folgt aussehen min oder Korrektur zu Ihrer "kompakteren" Anweisung: 'System.Action stringAction =() => StringAction (" eine Zeichenkette ");' (Der Compiler hat nicht genug Informationen, um zu wissen, dass 'var' eine' System.Action ist '). – devuxer
Oh, danke. Das wurde behoben. – Botz3000