С учетом этого кода:
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: это в компиляторе С# 4.0. Я обнаружил проблему в VS2010, и приведенный выше пример - из простейшего примера, сделанного мной в LINQPad 4.
Обновление 2: добавлено еще несколько примеров в список того, что работает.