为什么以下无法推断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
已经由“lambda”的返回类型确定。为什么不能同样适用于第一个?即使使用ec
(这应该是另一个编译器提示),它也无法推断。