是否有一种简单的方法来获取c#中包含模板参数的类的名称?
IE
Print( new List<int>{ 100, 1001});
产生以下输出之一:
List<int>
List<Int32>
System.Collections.Generics.List<System.Int32>
最好是前2个之一,但是Type.FullName
不是可行的选择。太冗长了。
太冗长的结果是不必要的。
System.Collections.Generic.List`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=235hosehoue5h]]
请注意,我只是在询问是否存在快捷方式。我不要求完全实现这种功能。
答案 0 :(得分:1)
创建一个获取类Name的方法。
Type
类Type.IsGenericType
中有一个属性,这表示此类型是否为genericType。 Type.GenericTypeArguments
获取通用类型的所有参数,并使用linq通过,
进行组合。看起来像这样。
public static class ExtensionLib {
public static string GetClassName(this Type objType)
{
string result = objType.Name;
if (objType.IsGenericType)
{
var name = objType.Name.Substring(0, objType.Name.IndexOf('`'));
var genericTypes = objType.GenericTypeArguments;
result = $"{name}<{string.Join(",", genericTypes.Select(GetClassName))}>";
}
return result;
}
}
输入
Console.WriteLine(typeof(List<int>).GetClassName());
Console.WriteLine(typeof(List<List<int>>).GetClassName());
Console.WriteLine(typeof(Dictionary<List<int>,string>).GetClassName());
结果
List<Int32>
List<List<Int32>>
Dictionary<List<Int32>,String>