为什么不能推断这些类型的参数?
可能重复:
C#3.0泛型类型推断 - 传递一个委托作为函数参数
为什么不能在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>)
的类型参数不能从用法推断出来。 尝试明确指定类型参数。
问题是Action
(除了已经是一个类型;请重命名它)实际上是一个可转换为委托类型Action<int>
的方法组。 类型推断引擎无法推断类型,因为方法组表达式是无类型的。 如果实际将方法组转换为Action<int>
,则类型推导会成功:
Method((Action<int>)Action); // Legal
这工作:
static void Main(string[] args)
{
Method<int>(Action);
}
static void Action(int arg)
{
// ...
}
static void Method<T>(Action<T> action)
{
// ...
}
只要把这是一个编译器,我明白你的意思。
我认为这是因为Action
用作方法组,但它不是Action<int>
类型。
如果你把它转换成这种类型,它就可以工作:
Method((Action<int>)Action);
链接地址: http://www.djcxy.com/p/51779.html