Estoy tratando de escribir una función que toma una función como uno de sus argumentos, una tarea que he hecho muchas veces antes. Esto funciona bien:La función de una función funciona en una dirección, no en la otra
int RunFunction(Func<int,int> f, int input) {
return f(input);
}
int Double(int x) {
return x*2;
}
// somewhere else in code
RunFunction(Double,5);
embargo, esto no funciona:
public static class FunctionyStuff {
public static int RunFunction(this Func<int,int> f, int input) {
return f(input);
}
}
// somewhere else in code
Double.RunFunction(5);
Cualquier idea de por qué funciona la primera y la segunda no lo hace?
Quizás también deba explicar * why * no ocurre con los métodos de extensión y las expresiones lambda. Es porque no tienen un tipo de delegado específico. 'Func' y un hipotético 'MyIntIntDelegate' podría tener la misma firma, pero serían diferentes tipos, por lo que el compilador no podría saber a cuál convertir. –
Timwi
Entonces, si estoy haciendo esto bien, en la primera versión hay un elenco implícito de 'Método' a' Func'? – Joe
@Timwi: Estaba llegando allí ... –