Предположим, что
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);
}
Почему он не компилируется?
EDIT: ошибка:
ошибка CS0411: аргументы типа для метода 'Namespace.Map < T, T2 > (System.Collections.Generic.List <T> , System.Func < T, T2 > )' не могут быть выведены из использования. Попробуйте явно указать аргументы типа.
Почему мне нужно указать тип функции Map()? Не может ли это сделать из пройденного Func<T>
? (в моем случае, квадрат)
Является ли ответ таким же, как и для Вывод общего типа С# 3.0 - передача делегата в качестве параметра функции?