找不到隐式类型数组的最佳类型
本文关键字:类型 最佳 数组 找不到 | 更新日期: 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 = "" },
};