评价typeof(Object[,][]).Name
给出Object[][,]
为什么typeof(Object [,] [])。Name等于“Object [] [,]”?
同样,typeof(Object[][,]).Name
给出Object[,][]
好像逗号移动无故。
什么给?
评价typeof(Object[,][]).Name
给出Object[][,]
为什么typeof(Object [,] [])。Name等于“Object [] [,]”?
同样,typeof(Object[][,]).Name
给出Object[,][]
好像逗号移动无故。
什么给?
混合不规则和矩形阵列是疯狂的秘诀。你关于给定类型符号的含义的直觉几乎总是错的,或者至少是我的。
阅读关于这个问题我的文章,看看有没有什么帮助你了解这是怎么回事:
http://blogs.msdn.com/b/ericlippert/archive/2009/08/17/arrays-of-arrays.aspx
基本上是:C#和反思谱写两种不同的方式混合褴褛/矩形阵列,每个为他们自己的原因。
撇开你可能想要声明这种奇特数组的目的,它看起来像反射产生数组名称的方式是递归的:首先,它产生数组元素类型的名称,然后附加square使用适当数量的逗号括号。
Object[,][]
是一维数组的二维数组; 2D阵列的元素类型为Object[]
,因此总体结果为"Object[]"+"[,]"
。
这里是算法的工作方式另一个例子:
typeof(Object[][,][,,][,,,][,,,,]).Name
是
Object[,,,,][,,,][,,][,][]
我没有看到比执行效率等背后的理由:只要是一致的,如果语法与C#匹配或不匹配,则无关紧要。毕竟,C#不是.NET领域唯一的语言。
正确;这里的奇怪之处在于C#说'object [,] []'是'object []'的一个二维数组,当它天真地看起来应该是'object [,]的一维数组' 。 – 2013-02-14 20:53:47
我发现改变逗号位置的规则,但我不知道它为什么会这样。逗号反映到阵列的中心。例如; '[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] ] [,] []','[] [] [,] [] []''会给你'[] [] [,] [] []'作为结果。 – 2013-02-14 20:47:36
+1。很好的问题! – ja72 2013-02-14 20:47:55
@SonerGönül:尝试'[] [,] [,,] [,,,] [,,,,]' - 现在清楚发生了什么? – 2013-02-14 20:49:32