可能重复:
C# 3.0 generic type inference - passing a delegate as a function parameter
为什么不能推断出Main
中的调用中以下代码示例的类型参数?
using System;
class Program
{
static void Main(string[] args)
{
Method(Action);
}
static void Action(int arg)
{
// ...
}
static void Method<T>(Action<T> action)
{
// ...
}
}
这会出现以下错误消息:
错误CS0411:方法
Program.Method<T>(System.Action<T>)
的类型参数 无法从使用中推断出来。尝试明确指定类型参数。
答案 0 :(得分:2)
问题是Action
(除了已经是类型;请重命名)实际上是一个可转换为委托类型Action<int>
的方法组。类型推理引擎无法推断类型,因为方法组表达式是无类型。如果您实际将方法组强制转换为Action<int>
,则类型推断成功:
Method((Action<int>)Action); // Legal
答案 1 :(得分:0)
刚才这是一个编译器,我明白你的意思。
我认为这是因为Action
用作方法组,但它不是Action<int>
类型。
如果你把它投射到这种类型它可以工作:
Method((Action<int>)Action);
答案 2 :(得分:0)
这有效:
static void Main(string[] args)
{
Method<int>(Action);
}
static void Action(int arg)
{
// ...
}
static void Method<T>(Action<T> action)
{
// ...
}