无法将匿名类型传递给泛型构造函数

时间:2015-01-08 22:05:46

标签: c# generics anonymous-types

假设我有以下通用类:

public class Control<TItem>
{
    public Control(TItem item)
    {
    }
}

当我尝试将匿名类型的对象传递给构造函数时,编译失败:

var objectOfAnonymousType = new { Foo = "bar" };

// cannot compile:
var control1 = new Control(objectOfAnonymousType);

但是,如果我不通过构造函数执行此操作,而是通过类之外的泛型方法,它似乎可以工作:

// can compile:
var control2 = CreateControl(objectOfAnonymousType);

使用的工厂方法:

static Control<TItem> CreateControl<TItem>(TItem item)
{
    return new Control<TItem>(item);
}

我无法理解这种限制背后的原因。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:4)

构造函数不支持具有泛型类型推断(尚未)。它们要求您明确列出该类型的泛型参数。当泛型参数是匿名类型时,即使您想要这样做,也不可能这样做。

Generic 方法支持其泛型参数的类型推断。这并不总是可能的,但通常情况就是如此。