评估typeof(Object[,][]).Name
会得到Object[][,]
类似地,typeof(Object[][,]).Name
给出Object[,][]
逗号似乎在莫名其妙地移动。
什么东西?
将不规则数组和矩形数组混合在一起会导致精神错乱。你对给定类型表示法含义的直觉几乎总是错误的,或者至少我的直觉是错误的
阅读我关于这个主题的文章,看看这是否有助于你理解这里发生了什么:
http://blogs.msdn.com/b/ericlippert/archive/2009/08/17/arrays-of-arrays.aspx
基本上:C#和反射符号以两种不同的方式混合了粗糙/矩形阵列,每种方式都有自己的原因。
抛开声明这种奇异数组的目的不谈,反射生成数组名称的方式似乎是递归的:首先,它生成数组元素类型的名称,然后在方括号中添加适当数量的逗号。
CCD_ 5是1D阵列的2D阵列;2D阵列的元素类型为Object[]
,因此总体结果为"Object[]"+"[,]"
。
以下是算法工作方式的另一个示例:
typeof(Object[][,][,,][,,,][,,,,]).Name
是
Object[,,,,][,,,][,,][,][]
除了实现的效率之外,我看不出它背后的原因:只要它是一致的,语法是否匹配C#都无关紧要。毕竟,C#并不是.NET世界中唯一的语言。