为什么没有这可以吗?
int A = 5, B = 10, X = 5, Y = 5;
var array = new[] { new { A, B }, new { X, Y } };
当我尝试编译,我得到:
CS0826:发现隐式类型数组没有最好的类型
感觉有点反直觉的,因为常规的匿名类型,我可以这样做:
int X = 5, Y = 5;
var point = new { X, Y };
你可以这样做,但我不知道,你应该做的。
int A = 5, B = 10, X = 5, Y = 5;
var array = new object[] { new { A, B }, new { X, Y } };
这是有效的,并且将编译就好了,而且是非常,非常难用。我强烈反对这样做。
至于为什么使用隐式初始化语法不起作用,该规范已经这样说,数组的初始化的12.6原因:
对于一维数组,数组初始化必须包括那些分配与阵列的元素类型兼容表达式序列的。表达式按照递增顺序,在索引零与所述元素开始初始化数组元素。
(重点煤矿)
因此,有没有你的两个匿名类型的,那么,他们是匿名之间的兼容型。
你要么需要在您的匿名类型隐含指定属性的名称,或使用对象的数组
var array = new[] { new { val1= A, val2=B }, new { val1=X, val2=Y } };
要么
var array = new object [] { new { A, B }, new { X, Y } };
但是让我们此基础上更进一步,并使用元组yehaa,更短的语法,类型,以及更简洁
var array = new[] { (A, B), (X, Y) };
或命名元组,世界上最好的
var array = new (int something ,int another)[] { (A, B), (X, Y) };
或更多的情况(除了其他的答案):
int A = 5, B = 10, X = 5, Y = 5;
var array = new[] { new { A, B }, new { A=X, B=Y } };
在这种情况下要创建隐式类型对象的阵列,其中的每一个具有两个整数属性,一个命名为A,另一个名为B.