在C#中获取没有完整命名空间的types名称

我有以下代码:

return "[Inserted new " + typeof(T).ToString() + "]"; 

  typeof(T).ToString() 

返回包含名称空间的全名

有没有办法只是得到类名(没有任何命名空间限定符?)

 typeof(T).Name // class name, no namespace typeof(T).FullName // namespace and class name typeof(T).Namespace // namespace, no class name 

试试这个获得genericstypes的types参数:

 public static string CSharpName(this Type type) { var sb = new StringBuilder(); var name = type.Name; if (!type.IsGenericType) return name; sb.Append(name.Substring(0, name.IndexOf('`'))); sb.Append("<"); sb.Append(string.Join(", ", type.GetGenericArguments() .Select(t => t.CSharpName()))); sb.Append(">"); return sb.ToString(); } 

也许不是最好的解决scheme(由于recursion),但它的工作原理。 输出结果如下:

 Dictionary<String, Object> 

利用( Type属性 )

  Name Gets the name of the current member. (Inherited from MemberInfo.) Example : typeof(T).Name; 

typeof运算(T),请将.Name;

在C#6.0(包括)之后,你可以使用nameofexpression式:

 using Stuff = Some.Cool.Functionality class C { static int Method1 (string x, int y) {} static int Method1 (string x, string y) {} int Method2 (int z) {} string f<T>() => nameof(T); } var c = new C() nameof(C) -> "C" nameof(C.Method1) -> "Method1" nameof(C.Method2) -> "Method2" nameof(c.Method1) -> "Method1" nameof(c.Method2) -> "Method2" nameof(z) -> "z" // inside of Method2 ok, inside Method1 is a compiler error nameof(Stuff) = "Stuff" nameof(T) -> "T" // works inside of method but not in attributes on the method nameof(f) -> “f” nameof(f<T>) -> syntax error nameof(f<>) -> syntax error nameof(Method2()) -> error “This expression does not have a name” 

最好的使用方法:

 obj.GetType().BaseType.Name