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");
}
Non capisco il motivo per cui TestDelegateStatement3
opere ma TestDelegateStatement1
fallisce. In entrambi i casi, Action
viene fornito con un metodo che accetta zero parametri. Possono chiamare un metodo che accetta un singolo parametro (aString
), ma che dovrebbe essere irrilevante. Non prendono un parametro. Non è proprio possibile farlo con le espressioni lamda o sto facendo qualcosa di sbagliato?Confusione su `Action` delegato ed Espressioni lambda
@Botz: min o correzione alla tua istruzione "più compatta": 'System.Action stringAction =() => StringAction (" a string ");' (il compilatore non ha abbastanza informazioni per sapere che 'var' è un' System.Action '). – devuxer
Oh, grazie. Risolto il problema. – Botz3000