Res*_*ing 20 .net c# typeof multidimensional-array gettype
我最近需要为任意类型构建C#特定名称(必须始终包含global :: specifier),并且遇到以下问题:
// 1 - value: System.String[,,,][,,][,]
string unexpectedFullName = typeof( string[,][,,][,,,] ).FullName;
// 2 - value: System.String[,][,,][,,,]
string expectedFullName = Type.GetType( "System.String[,][,,][,,,]" ).FullName;
Run Code Online (Sandbox Code Playgroud)
我期待两种情况下返回的值都相同.但是,由于某种原因,数组相关的部分值似乎是相反的(案例1).这是逆转的预期行为吗?
O. *_*per 13
虽然返回的值Type.FullName
和C#类型标识符有时碰巧是相同的,但这不能保证.请记住,Type.FullName
无论从哪个CLI语言调用它,都会返回相同的值,无论是C#,VB.NET,Oxygene还是其他任何东西.
对于多维和锯齿状数组,C#语法按照稍后编写的顺序列出索引,而反射语法返回与数组逻辑结构匹配的内容.并且,(C#)string[,][,,][,,,]
毕竟是类型的值string
,其是4维阵列(即string[,,,]
),其是3维阵列(即string[,,,][,,]
),并且其是2维阵列(即string[,,,][,,][,]
).
FullName
您可能希望Type
在分析类型时检查类的属性,而不是依赖于返回的反射语法名称.可以从那里检索诸如维数或通用参数之类的信息.
构造类型时,您还可以使用诸如MakeArrayType
或MakeGenericType
在运行时创建复杂类型的方法,而无需构建包含新类型成分的字符串.
Marc Gravell指出了这个答案的一些内容- 谢谢!
归档时间: |
|
查看次数: |
911 次 |
最近记录: |