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");
}
No entiendo por qué funciona, pero TestDelegateStatement3
TestDelegateStatement1
falla. En ambos casos, Action
se suministra con un método que toma cero parámetros. Pueden llamar al un método que toma un solo parámetro (aString
), pero eso debería ser irrelevante. No toman un parámetro. ¿Esto no es posible con expresiones lamda o estoy haciendo algo mal?`action delegado y lambda expresiones
@Botz: min o corrección a su afirmación "más compacta": 'System.Action stringAction =() => StringAction (" a string ");' (el compilador no tiene suficiente información para saber que 'var' es' System.Action '). – devuxer
Oh, gracias. Solucionado eso. – Botz3000