Почему следующее не делает вывод R
:
static R Foo<R>(Func<Action<R>, R> call) { ... }
Хотя в значительной степени «то же самое», работает:
static R Foo<R>(Func<Action, R> call) { ... }
Использование:
var i = Foo(ec => -1);
Способы, которыми первый образец «должен» вызываться для компиляции:
var i = Foo<int>(ec => -1);
-- или --
var i = Foo((Action<int> ec) => -1);
Мысли: Как видно из второго фрагмента, R
уже определяется возвращаемым типом 'лямбда'. Почему то же самое нельзя применить к первому? Даже при использовании ec
(что должно быть еще одной подсказкой компилятора) вывод невозможен.