Supongamos que tengo.NET: inferidos tipos genéricos sobre los métodos estáticos
public static List<T2> Map<T,T2>(List<T> inputs, Func<T, T2> f)
{
return inputs.ConvertAll((x) => f(x));
}
private int Square(int x) { return x*x; }
public void Run()
{
var inputs = new List<Int32>(new int[]{2,4,8,16,32,64,128,256,512,1024,2048});
// this does not compile
var outputs = Map(inputs, Square);
// this is fine
var outputs2 = Map<Int32,Int32>(inputs, Square);
// this is also fine (thanks, Jason)
var outputs2 = Map<Int32,Int32>(inputs, (x)=>x*x);
// also fine
var outputs2 = Map(inputs, (x)=>x*x);
}
¿Por qué no compilar?
EDITAR: El error es: CS0411
error: Los argumentos de tipo para el método de 'Namespace.Map < T, T2 > (System.Collections.Generic.List <T>, System.Func < T, T2 >) 'no se puede inferir del uso. Intente especificar los argumentos de tipo explícitamente.
¿Por qué tengo que especificar el tipo de la función Map()? ¿No puede inferirse esto del Func<T>
pasado? (En mi caso, Plaza)
¿Es la respuesta el mismo que para
C# 3.0 generic type inference - passing a delegate as a function parameter?
Interesante. ¿Le importaría publicar el error del compilador? –
¿Cuál es el resultado si cambia la var en la primera línea de Ejecutar() en la Lista? –
@tehMick: El resultado será el mismo. El tipo se infiere. –