c# - 为什么泛型方法不能推断参数类型?

标签 c# generics

public delegate T GenDel<T>();

class Program
{
    public static void genMet<T>(GenDel<T> d) { }

    static void Main(string[] args)
    {           
        genMet(new GenDel<string>(() => "Works"));
        genMet(() => "Works");
    }
}

在上面的示例中,泛型方法接收 lambda 表达式作为参数(genMet(() => "Works");),并且从这个 lambda 表达式方法能够推断参数类型。

在下一个示例中,为什么方法也不能推断参数类型,我们传递委托(delegate)实例作为参数而不是 lambda 表达式:

        genMet(new GenDel(() => "Doesn't work")); // Error: Using the generic type 'GenDel<T>' 
                                                  // requires 1 type arguments

最佳答案

类型推断仅适用于泛型方法,不适用于泛型类型或其构造函数。

关于c# - 为什么泛型方法不能推断参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13806817/

相关文章:

scala - 将类及其伴随对象作为类型参数的泛型特征

c# - 如何在不装箱/拆箱的情况下处理已知的通用类型

c# - EntityFramework 和 MySQL 与 LINQ

c# - "new Camera camera"这个词在Unity3d中有什么作用?

c# - 在 Silverlight/WPF 中绑定(bind)复杂属性

c# - 名称相似的T类型和非T类型方法的执行顺序?

c# - 在 C# 中使用属性获取和设置字段

Java 泛型 - 冗余类型初始化

java - 比较 Java 中的类类型有什么区别

c# - 通用方法无法在 IEnumerable<T> 上利用协方差