为什么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世界中唯一的语言。