评估typeof(Object[,][]).Name
会给Object[][,]
同样,typeof(Object[][,]).Name
会Object[,][]
似乎逗号正在无缘无故地移动。
是什么给出了?
答案 0 :(得分:19)
混合不规则和矩形阵列是疯狂的一种方法。你对给定类型符号意味着什么的直觉几乎总是错误的,或者至少是我的。
阅读我关于这个主题的文章,看看这是否有助于你理解这里发生了什么:
http://blogs.msdn.com/b/ericlippert/archive/2009/08/17/arrays-of-arrays.aspx
基本上:C#和反射以两种不同的方式表示混合的参差不齐/矩形阵列,每种方式都有其自身的原因。
答案 1 :(得分:3)
除了你可能想要声明这种奇特数组的目的外,看起来反射产生数组名称的方式是递归的:首先,它产生数组元素类型的名称,然后附加方括号用适当数量的逗号。
Object[,][]
是一维数组的二维数组; 2D数组的元素类型为Object[]
,因此整体结果为"Object[]"+"[,]"
。
以下是算法运作方式的另一个例子:
typeof(Object[][,][,,][,,,][,,,,]).Name
是
Object[,,,,][,,,][,,][,][]
除了实现的效率之外,我没有看到其背后的原因:只要它是一致的,语法是否与C#匹配并不重要。毕竟,C#并不是.NET世界中唯一的语言。