为什么typeof(Object [,] [])。Name等于“Object [] [,]”?

时间:2013-02-14 20:37:12

标签: c# .net reflection multidimensional-array

评估typeof(Object[,][]).Name会给Object[][,]

同样,typeof(Object[][,]).NameObject[,][]

似乎逗号正在无缘无故地移动。

是什么给出了?

2 个答案:

答案 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世界中唯一的语言。