找不到隐式类型数组的最佳类型

Sat*_*nix 25 c#

有人可以解释一下为什么这段代码:

var marketValueData = new[] {
    new { A = "" },
    new { A = "" },
    new { B = "" },
};
Run Code Online (Sandbox Code Playgroud)

给我错误:

找不到隐式类型数组的最佳类型

虽然这个工作完全正常:

var marketValueData = new[] {
    new { A = "" },
    new { A = "" },
    new { A = "" },
};
Run Code Online (Sandbox Code Playgroud)

除了不同的属性(B在第一个例子的最后一个条目中),它们是相同的.然而第一个没有编译.为什么?

Kam*_*ski 33

这是因为在第一个例子中你有两个不同的匿名类型,最后一个项目的定义与其他项目的定义不同.

在第一个示例中,一个包含A属性,一个包含B属性,编译器无法计算出数组的类型.在第二个示例中,有一个匿名类型,仅包含A.

我认为这是一个错字,所以你可以改变BA在第一个例子中最后一个条目

来自MSDN:

您可以创建一个隐式类型数组,其中数组实例的类型是从数组初始值设定项中指定的元素推断出来的.


Yas*_*Yas 29

您可以使用:

var marketValueData = new object[] {
    new { A = "" },
    new { A = "" },
    new { B = "" },
    ...,
};
Run Code Online (Sandbox Code Playgroud)

  • 这是给出问题中隐含问题的*唯一*解决方案 (3认同)

Nor*_*isz 5

匿名类型必须相同.只需B改为A.