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

标签 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);
}

我无法理解此限制背后的原因。谁能解释一下吗?

最佳答案

构造函数尚不支持泛型类型推断。它们要求您显式列出该类型的通用参数。当泛型参数是匿名类型时,即使您愿意,您也不可能这样做。

通用方法支持其通用参数的类型推断。这并不总是可能的,但通常是可能的,就像这里的情况一样。

关于c# - 无法将匿名类型传递给泛型构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27850368/

相关文章:

c# - 将常量字符串添加到正则表达式组的前缀

c# - 如何从匿名类型列表中迭代?

c# - 我可以将匿名对象传递给需要类型对象引用参数的方法吗?

c# - Linq 查询到 orderby 级别,然后是父项和子项

c# - 如何使用 C# 打印 PDF

c# - 使用 LINQ 按类型合并序列

delphi - 将具有不同通用类型的对象放在一起

java - 创建和处理泛型列表

java - 循环依赖泛型 - 未经检查的强制转换?

c# - 如何动态新建匿名类?