C# 获取泛型类的名称
问题
对于泛型类List<int>
,如果调用type.FullName
和type.Name
会分别返回下面的内容。
//type.FullName
System.Collections.Generic.List`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
//type.Name
List`1
解决方案
要想获得List
public static string GetTypeName(Type type)
{
if(!type.IsGenericType)
return type.Name;
//如果是List<int>, type.name 会返回 List`1
var genericTypeName = GenericTypeName(type.Name);
var genericArgumentTypeName = GetTypeName(type.GenericTypeArguments.Single());
return genericTypeName.Replace("_Type_", genericArgumentTypeName);
}
private static string GenericTypeName(string name)
{
switch(name)
{
case "List`1":
return "List<_Type_>";
}
throw new NotSupportedException();
}