我想知道为什么当 C# 3.0 编译器可以隐式地为同一方法创建委托时,当它作为参数传递给泛型函数时,它无法推断方法的类型。
这是一个例子:
class Test
{
static void foo(int x) { }
static void bar<T>(Action<T> f) { }
static void test()
{
Action<int> f = foo; // I can do this
bar(f); // and then do this
bar(foo); // but this does not work
}
}
我原以为我可以传递foo
给bar
并让编译器从传递的函数的签名中推断出类型,Action<T>
但这不起作用。但是,我可以在不强制转换的情况下创建一个Action<int>
from foo
,所以编译器不能通过类型推断来做同样的事情是否有正当理由?