должен выбрать компилятор? Точно такая же проблема происходит с вашим примером использования
вая этот код:
class C
{
C()
{
Test<string>(A); // fine
Test((string a) => {}); // fine
Test((Action<string>)A); // fine
Test(A); // type arguments cannot be inferred from usage!
}
static void Test<T>(Action<T> a) { }
void A(string _) { }
}
Компилятор жалуется, чтоTest(A)
не могу понятьT
бытьstring
.
Мне кажется, что это довольно простой случай, и я клянусь, что полагался на гораздо более сложный вывод в других написанных мной универсальных утилитах и функциях расширения. Что мне здесь не хватает?
Обновление 1: это в компиляторе C # 4.0. Я обнаружил эту проблему в VS2010, и приведенный выше пример взят из самого простого примера, который я сделал в LINQPad 4.
Обновление 2: добавлено еще несколько примеров в список того, что работает.