sirve - instanciar una clase c#
Obtenga el nombre del tipo sin el espacio de nombres completo en C# (6)
Tengo el siguiente código:
return "[Inserted new " + typeof(T).ToString() + "]";
Pero
typeof(T).ToString()
devuelve el nombre completo incluyendo el espacio de nombres
¿Hay alguna forma de obtener el nombre de la clase (sin ningún calificador de espacio de nombres?)
Después de la C # 6.0 (incluida) puede usar nameof expresión:
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”
Intenta esto para obtener parámetros de tipo para tipos genéricos:
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();
}
Tal vez no sea la mejor solución (debido a la recursión), pero funciona. Las salidas se ven como:
Dictionary<String, Object>
hacer uso de ( Tipo Propiedades )
Name Gets the name of the current member. (Inherited from MemberInfo.)
Example : typeof(T).Name;
mejor manera de usar:
obj.GetType().BaseType.Name
typeof (T) .Nombre;
typeof(T).Name // class name, no namespace
typeof(T).FullName // namespace and class name
typeof(T).Namespace // namespace, no class name