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

获取C#中泛型类型的用户友好名称分享

时间:2023-04-10 17:30:54 C#

获取C#中泛型类型的用户友好名称“姓名?例如,对于下面的代码,我想要“List”,而不是下面给出的简写或全名:varlist=newList();vartype=list.GetType();安慰。WriteLine(类型.名称??);Console.WriteLine(type.FullName);根据您编辑的问题,您需要以下内容:publicstaticstringGetFriendlyName(thisTypetype){if(type==typeof(int))return"int";elseif(type==typeof(short))返回“short”;elseif(type==typeof(byte))返回“byte”;elseif(type==typeof(bool))返回“bool”;elseif(type==typeof(long))返回“long”;elseif(type==typeof(float))返回“float”;elseif(type==typeof(double))返回“double”;elseif(type==typeof(decimal))返回“十进制”;elseif(type==typeof(string))返回“字符串”;elseif(type.IsGenericType)returntype.Name.Split('`')[0]+"GetFriendlyName(x)).ToArray())+">";elsereturntype.Name;}你可以避免写一个通过调用已经为您提供的递归方法:staticstringGetTypeName(类型类型){varcodeDomProvider=CodeDomProvider.CreateProvider("C#");vartypeReferenceExpression=newCodeTypeReferenceExpression(newCodeTypeReference(type));使用(varwriter=newStringWriter()){codeDomProvider.GenerateCodeFromExpression(typeReferenceExpression,writer,newCodeGeneratorOptions());返回writer.GetStringBuilder().ToString();请注意,这包括类型命名空间,但不包括程序集引用对于您问题中的类型,结果如下所示:System.Collections.Generic.List>我不清楚它是否符合"List>。当我需要一个解决方案时,我使用了这段代码:[0];vargenericParameters=type.GetGenericArguments().Select(FriendlyName).ToCsv();返回名称前缀+“”;}返回类型。名称;}和publicstaticstringToCsv(thisIEnumerablecollectionToConvert,stringseparator=","){returnString.Join(separator,collectionToConvert.Select(o=>o.ToString()));}用法示例:vartypeDisplayText=MyDataModel.GetType().FriendlyName();...如果您正在创建自动生成的开发人员帮助页面,这也很有用,因为它包含通用参数名称:publicstaticstringDefinitionTitle(thisTypetype){if(type.IsGenericType){varnamePrefix=type.Name.Split(new[]{'`'},StringSplitOptions.RemoveEmptyEntries)[0];vargenericParameters=type.GetGenericArguments().Select(a=>a.Name).ToCsv();返回名称前缀+“”;}返回类型。名称;}用法示例:vartypeDefinitionText=typeof(Dictionary).DefinitionTitle());反射-从System.Type实例获取泛型参数您还可以对泛型类型使用反射:vardict=newDictionary();输入type=dict.GetType();Console.WriteLine("类型参数:");foreach(Typeargintype.GetGenericArguments()){Console.WriteLine("{0}",arg);然后你可以把它放在你的对象的扩展方法中,并在任何需要的地方调用它我还想补充一点,每个递归都可以写成命令式代码。所以整个代码看起来像:staticvoidGetGenericParametersNames(Typetype){QueuetypeQueue=newQueue();typeQueue.Enqueue(类型);while(typeQueue.Any()){vart=typeQueue.Dequeue();安慰。WriteLine("{0}",arg);foreach(在t.GetGenericArguments()中输入arg){typeQueue.Enqueue(t);}}}建立一个更完整的Kirk'sanswer就像这样。编辑:这是完整的代码:以上是C#学习教程:获取C#中泛型类型的通俗易懂的名字分享所有内容,如果对大家有用还需要进一步了解C#学习教程,希望大家多多关注——publicstaticclassTypeTranslator{privatestaticDictionary_defaultDictionary=newDictionary{{typeof(int),"int"},{typeof(uint),"uint"},{typeof(long),"long"},{typeof(ulong),"ulong"},{typeof(short),"short"},{typeof(ushort),"ushort"},{typeof(byte),"byte"},{typeof(sbyte),"sbyte"},{typeof(bool),"bool"},{typeof(float),"float"},{typeof(double),"double"},{typeof(decimal),"decimal"},{typeof(char),"char"},{typeof(string),"string"},{typeof(object),"object"},{typeof(void),"void"}};publicstaticstringGetFriendlyName(thisTypetype,Dictionarytranslations){if(translations.ContainsKey(type))returntranslations[type];elseif(type.IsArray)returnGetFriendlyName(type.GetElementType(),translations)+"[]";elseif(type.IsGenericType&&type.GetGenericTypeDefinition()==typeof(Nullable))返回type.GetGenericArguments()[0].GetFriendlyName()+"?";elseif(type.IsGenericType)returntype.Name.Split('`')[0]+"GetFriendlyName(x)).ToArray())+">";elsereturntype.Name;}publicstaticstringGetFriendlyName(thisTypetype){returntype.GetFriendlyName(_defaultDictionary);}}本文采集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除,转载请注明来源: