gpt4 book ai didi

c# - System.Type.FullName 的意外值

转载 作者:IT王子 更新时间:2023-10-29 04:39:24 33 4
gpt4 key购买 nike

我最近需要为任意类型构建 C# 特定名称(必须始终包含 global::说明符)并且遇到了以下问题:

// 1 - value: System.String[,,,][,,][,]
string unexpectedFullName = typeof( string[,][,,][,,,] ).FullName;

// 2 - value: System.String[,][,,][,,,]
string expectedFullName = Type.GetType( "System.String[,][,,][,,,]" ).FullName;

我原以为两种情况下返回的值都是一样的。但是,由于某种原因,值的数组相关部分似乎被颠倒了(案例 1)。这是预期的逆转行为吗?

最佳答案

虽然 Type.FullName 返回的值和 C# 类型标识符有时恰好相同,这是不能保证的。请记住,Type.FullName 返回相同的值,无论它是从哪种 CLI 语言调用的,无论是 C#、VB.NET、Oxygene 还是其他任何语言。

对于多维数组和锯齿状数组,C# 语法按照后面写入的顺序列出索引,而反射语法返回与数组的逻辑结构相匹配的内容。并且 (C#) string[,][,,][,,,] 毕竟是 string 类型的值,它是一个 4 维数组(即 string[,,,]),其中一个 3 维数组(即 string[,,,][,,])及其一个 2 维数组(即 string[,,,][,,][,]).

与其依赖于 FullName 返回的反射语法名称,不如在分析类型时检查 Type 类的属性。 number of dimensions等信息或 generic arguments可以从那里检索。

构造类型时,也可以使用MakeArrayType等方法或 MakeGenericType在运行时创建复杂类型,而无需构造包含新类型成分的字符串。

本回答的部分内容被Marc Gravell指出- 谢谢!

关于c# - System.Type.FullName 的意外值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11720579/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com