Вывод типа загадочным образом терпит неудачу

Почему следующее не делает вывод 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(что должно быть еще одной подсказкой компилятора) вывод невозможен.

9
задан jalf 4 June 2012 в 15:54
поделиться