为什么不能推断这些类型的参数?

可能重复:
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

上一篇: Why can't these type arguments be inferred?

下一篇: Named arguments and generic type inference in C# 4.0