从字符串.NetC#获取完全限定的类型名称从此字符串中获取完全限定名称?值得记住的是int不是一种类型。它是C#为System.Int32类型提供的别名。考虑到这一点,假设您只关心核心类型,您可以尝试:vartypeName="DateTime";varsystemTypesAssembly=Assembly.Load("mscorlib");vartype=(fromtinsystemTypesAssembly.GetTypes()wheret.Name==typeNameselectt).FirstOrDefault();Console.WriteLine(type.FullName);正如我所说,这不适用于Int,但适用于Int32,这是一种别名类型。此代码也不包含错误处理,例如,在mscorlib中找不到与您在typeName中输入的类型相匹配的类型在继续之前,我想指出,在.NETFramework基类中没有名为Int的类图书馆。有System.Int32,它恰好在C#中有一个别名:int。您可以通过多种方式做到这一点一种简单但有限的方法是将字符串映射到相应的FQN:"},{"DateTime","System.DateTime"},};publicstringGetFqn(stringname){returnFqnMap[name];//TODO:adderrorhandling}更复杂但更可靠的方法将涉及使用反射从一组程序集中搜索所有类型。像这样:publicclassFqnResolver{publicFqnResolver(IEnumerableassemblies){Assemblies=newList(assemblies);}publicFqnResolver(paramsAssembly[]assemblies):this(assembliesasIEnumerable){}publicFqnResolver():this(newAssembly[0]){}publicICollectionAssemblies{get;私有集;}publicstringGetFqn(stringname){varcandidates=fromainAssembliesfromtina.GetTypes()wheret.Name==nameselectt.FullName;返回candidates.First();//如果未找到有效类型,将抛出//并且不计算重复项}}这在.Net中并不是真正有效的方法。为了获得类型的完全限定名称,您需要使用Type对象。为了获得Type对象,您通常需要一个实例、完全限定名称,或者您需要进行一些搜索。后者可以工作,但效率不高,因为您需要搜索每个程序集并键入加载的AppDomain才能找到正确的答案。foreach(AppDommain.CurrentDomain.GetAssemblies()中的varassembly){foreach(assembly.GetTypes()中的vartype){if(type.Name==target){returntype.FullName;尽管如此,这个解决方案仍然不会100%为您工作。主要是因为.Net框架中没有“Int”类型。它的实际类型名称是“Int32”。像“String”这样的类型名称可能不明确,因为它可能引用System.String或FooAssembly.String,因此您必须在所有加载的程序集中搜索所有类型,这可能会产生多个结果。这点反射可能会很慢,但是可以在牺牲内存的情况下显着优化缓存结果:用到,需要多了解C#学习教程,希望大家多多关注——staticvoidMain(string[]args){字符串类型名="字符串";foreach(vartypeinGetFullType(typeName)){Console.WriteLine(type.FullName);}}staticIEnumerableGetFullType(stringclassName){foreach(AppDomain.CurrentDomain.GetAssemblies()中的varassembly){foreach(assembly.GetTypes()中的vartype){if(type.Name.Equals(className,StringComparison.OrdinalIgnoreCase)){收益返回类型;}}}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
