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