当前位置: 首页 > 编程语言 > C#

System.Type.FullName的意外值分享

时间:2023-04-10 20:29:15 C#

System.Type.FullName的意外值我最近需要为任意类型构建C#特定名称(必须始终包含global::specifier)并遇到了以下问题://1-值:System.String[,,,][,,][,]stringunexpectedFullName=typeof(string[,][,,][,,,]).FullName;//2-值:System.String[,][,,][,,,]stringexpectedFullName=Type.GetType("System.String[,][,,][,,,]").FullName;我希望这两种情况返回的值都是一样的。但是,由于某种原因,数组相关部分中的值似乎颠倒了(情况1)。这是否扭转了预期的行为?尽管Type.FullName返回的值和C#类型标识符有时恰好相同,但这并不能保证。请记住,无论调用哪种CLI语言,无论是C#、VB.NET、Oxygene还是其他任何语言,Type.FullName都会返回相同的值。对于多维数组和锯齿状数组,C#语法按照后面写入的顺序列出索引,而反射语法返回与数组的逻辑结构匹配的内容。毕竟(C#)string[,][,,][,,,]是string类型的值,是4维数组(即string[,,,]),是3维数组(即string[,,,][,,])及其二维数组(即string[,,,][,,][,])。您可能希望在分析类型时检查Type类的属性,而不是依赖FullName返回的反射语法名称。可以从那里检索维度或通用参数等信息。在构造类型时,您还可以使用MakeArrayType或MakeGenericType等方法在运行时创建复杂类型,而无需构造包含新类型组件的字符串。MarcGravell指出了其中的一些答案-谢谢!注意:这并不能直接解决您的问题这是否会逆转预期的行为?但我觉得它增加了它。您可以使用GenerateCodeFromExpression返回一个字符串,该字符串可用于生成代码来为您生成类型,例如使用此代码(由hvd修改了此SO答案)://////返回此类型的可读名称。///例如type=typeof(IEnumerable>),///type.FriendlyName()返回System.Collections.Generic.IEnumerable>///type.Name返回IEnumerable`1///type.FullName()返回System.Collections.Generic.IEnumerable`1[[System.IComparable`1[[System.Int32,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]],mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]]///publicstaticstringFriendlyName(thisTypetype){stringresult;使用(varcodeDomProvider=CodeDomProvider.CreateProvider("C#")){vartypeReferenceExpression=newCodeTypeReferenceExpression(newCodeTypeReference(type));使用(varwriter=newStringWriter()){codeDomProvider.GenerateCodeFromExpression(typeReferenceExpression,write呃,新的CodeGeneratorOptions());结果=writer.GetStringBuilder().ToString();}}返回结果;通过让codeDomProvider处理字符串表示,您可以确保生成的内容与您定义TypeFullName的方式相匹配结果://returns"System.String[,,,][,,][,]"typeof(string[,][,,][,,,])。全名;//返回"System.String[,][,,][,,,]"typeof(string[,,,][,,][,]).FullName;//返回“System.Collections.Generic.List`1[[System.Int32,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]]”typeof(List).FullName;FriendlyName以上结果就是C#学习教程的全部内容:UnexpectedvalueofSystem.Type.FullName。如果对大家有用并且需要进一步了解C#学习教程,希望大家多多关注—//returns"string[,][,,][,,,]"typeof(string[,][,,][,,,])。友好名称();//返回“string[,,,][,,][,]”typeof(string[,,,][,,][,])。友好名称();//返回“System.Collections.Generic.List”typeof(List).FriendlyName();本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: