.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 ?

questionAnswers(5)

yourAnswerToTheQuestion