Tengo el siguiente código:
return "[Inserted new " + typeof(T).ToString() + "]";
Pero
typeof(T).ToString()
devuelve el nombre completo, incluido el espacio de nombres
¿Hay alguna forma de obtener el nombre de la clase (sin ningún calificador de espacio de nombres?)
c#
namespaces
typeof
leora
fuente
fuente
string1 + anything.ToString() + string2
es redundante. El compilador inserta la llamadaToString
automáticamente si lo hacestring1 + anything + string2
.Type
instancia (según lo devueltotypeof(..)
), estoy bastante seguro de que lo descubrirías tú mismo ...Respuestas:
fuente
Name
no considera los parámetros de tipo.this.GetType().Name
,this.GetType().FullName
etc. si se trata de instancias.Name
¡tampoco considera los tipos anidados!Pruebe esto para obtener parámetros de tipo para tipos genéricos:
Quizás no sea la mejor solución (debido a la recurrencia), pero funciona. Las salidas se ven así:
fuente
StringBuilder
en cada llamada recursiva (incluso el caso base cuando no se usa), pero ignora elstring.Join
lambda temporal y LINQ. Solo useString
hasta que sepa que es un cuello de botella. / ranthacer uso de ( Propiedades de tipo )
fuente
typeof (T) .Name;
fuente
Después del C # 6.0 (incluido) puede usar el nombre de expresión:
¡Nota!
nameof
no obtiene el tipo de tiempo de ejecución del objeto subyacente, es solo el argumento en tiempo de compilación. Si un método acepta un IEnumerable, nameof simplemente devuelve "IEnumerable", mientras que el objeto real podría ser "List".fuente
nameof
no devuelve el nombre de laType
nameof
devuelto el nombre de laType
captura de pantalla con la prueba: prntscr.com/irfk2cType
, es solo el argumento en tiempo de compilación. Si un método acepta unIEnumerable
,nameof
simplemente devuelve "IEnumerable", mientras que el objeto real podría ser "List <string>". No creo que responda la pregunta del OP.mejor forma de usar:
fuente
obj.GetType().BaseType.Name
regresa,"TypeInfo"
que no es la solución deseada como espero.