Eu tenho o seguinte código:
return "[Inserted new " + typeof(T).ToString() + "]";
Mas
typeof(T).ToString()
retorna o nome completo, incluindo o espaço para nome
Existe alguma maneira de obter apenas o nome da classe (sem qualificadores de espaço para nome?)
c#
namespaces
typeof
leora
fonte
fonte
string1 + anything.ToString() + string2
é redundante. O compilador insere a chamadaToString
automaticamente, se você o fizerstring1 + anything + string2
.Type
instância (como retornado portypeof(..)
) eu tenho certeza que você iria descobrir isso sozinho ...Respostas:
fonte
Name
não considera parâmetros de tipo.this.GetType().Name
,this.GetType().FullName
etc., se estiver lidando com instâncias.Name
também não considera tipos aninhados!Tente isso para obter parâmetros de tipo para tipos genéricos:
Talvez não seja a melhor solução (devido à recursão), mas funciona. As saídas são parecidas com:
fonte
StringBuilder
em cada chamada recursiva (mesmo no caso base quando não é usado), mas ignora ostring.Join
lambda temporário e o LINQ. Basta usarString
até saber que é um gargalo. / rantuse ( Type Properties )
fonte
typeof (T) .Name;
fonte
Após o C # 6.0 (incluindo), você pode usar o nome da expressão:
Nota!
nameof
Para obter o tipo de tempo de execução do objeto subjacente, é apenas o argumento em tempo de compilação. Se um método aceitar um IEnumerable, nameof simplesmente retornará "IEnumerable", enquanto o objeto real poderá ser "List".fonte
nameof
não retorna o nome doType
nameof
o nome daType
captura de tela com a prova: prntscr.com/irfk2cType
, é apenas o argumento em tempo de compilação. Se um método aceita umIEnumerable
,nameof
simplesmente retorna "IEnumerable", enquanto o objeto real pode ser "List <string>". Não acha que responde à pergunta do OP.melhor maneira de usar:
fonte
obj.GetType().BaseType.Name
retorna,"TypeInfo"
que não é a solução desejada, como eu esperava.