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() + string2es redundante. El compilador inserta la llamadaToStringautomáticamente si lo hacestring1 + anything + string2.Typeinstancia (según lo devueltotypeof(..)), estoy bastante seguro de que lo descubrirías tú mismo ...Respuestas:
fuente
Nameno considera los parámetros de tipo.this.GetType().Name,this.GetType().FullNameetc. 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
StringBuilderen cada llamada recursiva (incluso el caso base cuando no se usa), pero ignora elstring.Joinlambda temporal y LINQ. Solo useStringhasta 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!
nameofno 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
nameofno devuelve el nombre de laTypenameofdevuelto el nombre de laTypecaptura de pantalla con la prueba: prntscr.com/irfk2cType, es solo el argumento en tiempo de compilación. Si un método acepta unIEnumerable,nameofsimplemente 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.Nameregresa,"TypeInfo"que no es la solución deseada como espero.