new List<int>().GetType().Name
是List`1。如何获得更像List<int>
的名称(不 List<T>
)?
答案 0 :(得分:2)
一种方法是使用new List<int>().GetType().ToString()
,返回System.Collections.Generic.List`1[System.Int32]
。
或者你可以写下一个小帮手方法:
string GetShortName(Type type)
{
string result = type.Name;
if (type.IsGenericType)
{
// remove genric indication (e.g. `1)
result = result.Substring(0, result.LastIndexOf('`'));
result = string.Format(
"{0}<{1}>",
result,
string.Join(", ",
type.GetGenericArguments().Select(t => GetShortName(t))));
}
return result;
}
输出如下字符串:
List<Int32>
List<T>
Dictionary<List<Double>, Int32>
Tuple<T1, T2, T3, T4>
请注意,对于嵌套类型,这将只返回最里面的名称。
答案 1 :(得分:0)
String.Format("{0}<{1}>",GetType().Name, typeof(T).Name)
编辑:es在评论中指出,这在泛型类中是有用的,f.e。 to to say toString()的重载的不同的泛型类型参数。大多数情况下,查询上面的{0}第一个参数没有意义,因为它在同一个类中没有变化。所以人们也可以使用:
String.Format("List<{0}>", typeof(T).Name)