【发布时间】:2012-06-05 00:07:55
【问题描述】:
为什么以下无法推断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);
想法:从第二个 sn-p 中可以看出,R 已经由 'lambda' 的返回类型确定。为什么不能同样适用于第一个?即使使用ec(这应该是另一个编译器提示),它也无法推断。
【问题讨论】:
-
因此,在您的示例中,
ec可转换为接受int并返回void的委托? -
C# 中的类型推断规则是为了涵盖基本情况。在极少数情况下,规则(故意)不“接受”。
-
您能添加一个
ec的示例声明/实现吗?我的猜测是问题出在那儿。 -
这是一篇关于这个主题的有趣文章。 msdn.microsoft.com/en-us/vstudio/jj131514.aspx。可能会或可能不会真正回答您的问题,但有很好的背景信息。
-
我可能找到了你的副本;)stackoverflow.com/questions/6229131/…
标签: c# generics type-inference