【发布时间】:2012-07-28 01:36:01
【问题描述】:
我最近需要为任意类型构建 C# 特定名称(必须始终包含 global:: 说明符)并且遇到了以下问题:
// 1 - value: System.String[,,,][,,][,]
string unexpectedFullName = typeof( string[,][,,][,,,] ).FullName;
// 2 - value: System.String[,][,,][,,,]
string expectedFullName = Type.GetType( "System.String[,][,,][,,,]" ).FullName;
我期望在这两种情况下返回的值是相同的。但是,由于某种原因,值的与数组相关的部分似乎被颠倒了(案例 1)。这是预期的逆转行为吗?
【问题讨论】:
-
我以前遇到过这个;似乎在 C# 中您按照读取的顺序声明数组索引/维度,反射返回与其逻辑结构匹配的类型名称。毕竟,(C#)
string[,][,,][,,,]是string类型的值,它是一个 4 维数组(即string[,,,]),它是一个 3 维数组(即string[,,,][,,]),它是一个 2维数组(即string[,,,][,,][,])。 -
他所说的一切^^^^。 c# 语法 (explained in depth here) 不需要匹配反射命名约定。因此,如果您正在处理反射:使用反射命名。在其他新闻中,嵌套类型不是
Outer.Inner,而是Outer+Inner,泛型不是Foo<,,>,而是Foo`3。 -
我正在根据一些输入类型生成代码,所以我肯定需要反转通过 System.Type 实例提供的索引/维度信息。
-
@O.R.Mapper:你们中的哪一个可以将其发布为答案,以便我接受吗?
-
@MarcGravell:你们中的哪一个可以将其发布为答案,以便我接受吗?
标签: c# .net multidimensional-array typeof gettype