有人可以解释一下为什么这段代码:
var marketValueData = new[] {
new { A = "" },
new { A = "" },
new { B = "" },
};
给我错误:
找不到隐式类型数组的最佳类型
虽然这个完美无缺:
var marketValueData = new[] {
new { A = "" },
new { A = "" },
new { A = "" },
};
除了第一个示例的最后一个条目中的不同属性(B
)之外,它们是相同的。然而第一个没有编译。为什么呢?
答案 0 :(得分:32)
这是因为在第一个例子中你有两个不同的匿名类型,最后一个项目的定义与其他项目的定义不同。
在第一个示例中,一个包含A
属性,另一个包含B
属性,编译器无法确定数组的类型。在第二个示例中,有一个匿名类型,仅包含A
。
我认为这是拼写错误,因此您可以在第一个示例的最后一个条目中将B
更改为A
来自MSDN:
您可以创建一个隐式类型数组,其中包含类型 数组实例是从数组中指定的元素推断出来的 初始化程序。
答案 1 :(得分:26)
您可以使用:
var marketValueData = new object[] {
new { A = "" },
new { A = "" },
new { B = "" },
...,
};
答案 2 :(得分:5)
匿名类型必须相同。只需将B
更改为A
。
答案 3 :(得分:0)
我在这样的代码行中遇到了类似的问题
sqwOraContext.save(new [] {学生,课程});
学生和课程都继承自SQWEntity,但是出于某种原因,编译器不会检查基本类型。 仅将数组类型设置为SQWEntity可以解决该错误。
sqwOraContext.save(new SQWEntity [] {学生,课程});
当然,在Student1和Student2具有相同类型的情况下,无需在这样的行中指定类型。
sqwOraContext.save(new [] {student1,student2});
答案 4 :(得分:0)
你也可以写一个强匿名类型:
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 = "" },
};