У меня есть следующий код:
return "[Inserted new " + typeof(T).ToString() + "]";
Но
typeof(T).ToString()
возвращает полное имя, включая пространство имен
В любом случае можно просто получить имя класса (без квалификаторов пространства имен?)
c#
namespaces
typeof
Лиора
источник
источник
string1 + anything.ToString() + string2
излишне. Компилятор вставляет вызовToString
автоматически, если вы делаетеstring1 + anything + string2
.Type
экземпляре (как возвращеноtypeof(..)
), я уверен, что вы сами это выясните ...Ответы:
источник
Name
не учитывает параметры типа.this.GetType().Name
,this.GetType().FullName
и т. Д., Если иметь дело с примерами.Name
также не учитывает вложенные типы!Попробуйте это, чтобы получить параметры типа для универсальных типов:
Возможно, не лучшее решение (из-за рекурсии), но оно работает. Выходы выглядят так:
источник
StringBuilder
в каждом рекурсивном вызове (даже в базовом случае, когда он не используется), но игнорируетstring.Join
временную и LINQ-лямбду. Просто используйте,String
пока не узнаете, что это узкое место. / rantиспользовать ( Тип Свойства )
источник
TypeOf (Т) .Name;
источник
После C # 6.0 (включая) вы можете использовать nameof expression:
Заметка!
nameof
не получить базовый тип времени выполнения объекта, это просто аргумент времени компиляции. Если метод принимает IEnumerable, nameof просто возвращает «IEnumerable», тогда как фактическим объектом может быть «List».источник
nameof
не возвращает имяType
nameof
вернул имяType
, скриншот с доказательством: prntscr.com/irfk2cType
, это просто аргумент времени компиляции. Если метод принимает,IEnumerable
тоnameof
просто возвращает «IEnumerable», тогда как фактическим объектом может быть «List <string>». Не думаю, что это отвечает на вопрос ОП.лучший способ использовать:
источник
obj.GetType().BaseType.Name
возвращается,"TypeInfo"
что не является желаемым решением, как я ожидаю.