Рассмотрим следующий пример:
class Test
{
public void Fun<T>(Func<T, T> f)
{
}
public string Fun2(string test)
{
return "";
}
public Test()
{
Fun<string>(Fun2);
}
}
Это хорошо компилируется.
Интересно, почему я не могу удалить аргумент <string>
generic? Я получаю сообщение об ошибке, из-за которого он не может быть выведен из использования.
Я понимаю, что такой вывод может быть сложным для компилятора, но, тем не менее, это возможно.
Я хотел бы объяснить это поведение.
Изменить ответ на вопрос Джона Ханны:
Тогда почему это работает?
class Test
{
public void Fun<T1, T2>(T1 a, Func<T1, T2> f)
{
}
public string Fun2(int test)
{
return test.ToString();
}
public Test()
{
Fun(0, Fun2);
}
}
Здесь я связываю только один параметр с T1 a
, но T2
кажется сложным.