Мне интересно, почему компилятор С# 3.0 не может вывести тип метода, когда он передается как параметр в общую функцию, когда он может неявно создавать делегат для того же метода.
Вот пример:
class Test
{
static void foo(int x) { }
static void bar<T>(Action<T> f) { }
static void test()
{
Action<int> f = foo; // I can do this
bar(f); // and then do this
bar(foo); // but this does not work
}
}
Я бы подумал, что смогу передать foo
в bar
и предоставить компилятору тип Action<T>
из сигнатуры передаваемой функции, но это не сработает. Однако я могу создать Action<int>
из foo
без кастинга, так есть ли законная причина, по которой компилятор не мог также сделать то же самое через вывод типа?