无法将匿名类型传递给泛型构造函数
Cannot pass anonymous type to generic constructor
假设我有以下泛型类:
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);
}
我无法理解此限制背后的原因。谁能解释一下?
构造函数不支持泛型类型推断(目前)。它们要求您明确列出该类型的通用参数。当泛型参数是匿名类型时,你不可能这样做,即使你想这样做。
泛型 方法 支持其泛型参数的类型推断。这并不总是可能的,但通常是这样,就像这里的情况一样。
假设我有以下泛型类:
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);
}
我无法理解此限制背后的原因。谁能解释一下?
构造函数不支持泛型类型推断(目前)。它们要求您明确列出该类型的通用参数。当泛型参数是匿名类型时,你不可能这样做,即使你想这样做。
泛型 方法 支持其泛型参数的类型推断。这并不总是可能的,但通常是这样,就像这里的情况一样。