24

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

同样,typeof(Object[][,]).Name给出Object[,][]

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

是什么赋予了?

4

2 回答 2

19

混合参差不齐和矩形阵列是一种疯狂的方法。您对给定类型符号含义的直觉几乎总是错误的,或者至少我的直觉是错误的。

阅读我关于该主题的文章,看看这是否有助于您了解这里发生的事情:

http://blogs.msdn.com/b/ericlippert/archive/2009/08/17/arrays-of-arrays.aspx

基本上:C# 和反射以两种不同的方式表示混合的不规则/矩形数组,每种方式都有自己的原因。

于 2013-02-14T20:45:17.873 回答
3

撇开您可能想要声明这种奇异数组的目的不谈,看起来反射生成数组名称的方式是递归的:首先,它生成数组元素类型的名称,然后在方括号中附加适当的逗号数。

Object[,][]是一维数组的二维数组;二维数组的元素类型是Object[],所以总体结果是"Object[]"+"[,]"

这是算法工作方式的另一个说明:

typeof(Object[][,][,,][,,,][,,,,]).Name

Object[,,,,][,,,][,,][,][]

除了实现的效率,我没有看到它背后的原因:只要它是一致的,语法是否匹配 C# 并不重要。毕竟,C# 并不是 .NET 世界中唯一的语言。

于 2013-02-14T20:51:02.550 回答