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

本文关键字:类型 最佳 数组 找不到 | 更新日期: 2023-09-27 18:36:27

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

var marketValueData = new[] {
    new { A = "" },
    new { A = "" },
    new { B = "" },
};

给我错误:

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

虽然这个工作得很好:

var marketValueData = new[] {
    new { A = "" },
    new { A = "" },
    new { A = "" },
};

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

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

您可以使用:

var marketValueData = new object[] {
    new { A = "" },
    new { A = "" },
    new { B = "" },
    ...,
};

这是因为您在第一个示例中有两种不同的匿名类型,因此最后一项的定义与其他项的定义不同。

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

我认为这是一个错字,因此您可以在第一个示例中的最后一个条目中将B更改为A

从 MSDN:

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

匿名类型必须相同。只需将B更改为A即可。

我在这样的代码行中遇到了类似的问题

sqwOraContext.save(new[] { student, course });

学生和课程都继承自 SQWEntity,但由于某种原因编译器不检查基类型。仅将数组类型设置为 SQWEntity 解决了错误。

sqwOraContext.save(new SQWEntity[] { student, course });

当然,没有必要在这样的行中指定类型,其中学生 1、学生 2 属于同一类型。

sqwOraContext.save(new[] { student1, student2 });

你也可以

写一个强匿名类型:

var d = default(string); // default value for A and B properties
var marketValueData = new[] {
    new { A = "", B = d },
    new { A = "", B = d },
    new { A = d, B = "" },
};