.NET: Wnioskowane typy ogólne na metodach statycznych
Przypuśćmy, że mam
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);
}
Dlaczego się nie kompiluje?
EDYTOWAĆ: Błąd:
błąd CS0411: Argumenty typu dla metody 'Namespace.Map <T, T2> (System.Collections.Generic.List <T>, System.Func <T, T2>)' nie można wywnioskować z użycia. Spróbuj wyraźnie podać argumenty typu.
Dlaczego muszę określić typ funkcji Map ()? Czy nie może to wywnioskować z minionegoFunc<T>
? (w moim przypadku Square)
Czy odpowiedź jest taka sama jak dla
Wnioskowanie typu ogólnego C # 3.0 - przekazanie delegata jako parametru funkcji ?