2016-03-04 5 views
2

У меня есть метод, который я пытаюсь сделать немного более простым для широкого развертывания.substitute system.reflection для «this»

NHibernateISession.log4netLogFileEntry("DEBUG", "hello", 
    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName); 

Я хотел бы уменьшить System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName к простому this.

Но как я могу получить FullName от this.FullName?

Просто FYI в случае, это поможет вам: System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName дает

<namespace>.<namespace>.<namespace>.<class> 
+0

Что 'this' должны делать с' System.Reflection.MethodBase.GetCurrentMethod() DeclaringType.FullName'.? – Luaan

+0

Вы имеете в виду 'this.GetType(). FullName'? –

+0

Преобразование NHibernateISession.log4netLogFileEntry ("DEBUG", "hello", System.Reflection.MethodBase.GetCurrentMethod(). DeclaringType.FullName); - to - NHibernateISession.log4netLogFileEntry («DEBUG», «привет», это); – Steve

ответ

0

System.Exception.StackTrace - отличная замена для того, что я пытался. На самом деле, это еще лучше. И все, что мне нужно сделать: try {...} catch (Исключение e) {myfunction (e); } и: MyFunction (Exception е) {журнал (e.StackTrace)}

3

this является объектом - System.Reflection.MethodBase.GetCurrentMethod().DeclaringType тип. Если вы хотите, чтобы получить полное имя типа this затем использовать

this.GetType().FullName 

Но обратите внимание, что они не эквивалентны. Более длинный возвращает тип, который объявляет метод. Если фактический объект является подклассом, вы получите имя подтипа. Он также не будет работать для static методов, а System.Reflection.MethodBase.GetCurrentMethod().DeclaringType будет.

Если вы действительно хотите, тип, объявляющий метод в вопросе затем

System.Reflection.MethodBase.GetCurrentMethod().DeclaringType 

правильный подход. Нет ключевого слова или ярлыка, которые можно использовать на своем месте в целом.

+0

Исправить. Я тип, объявляющий метод. Я не хочу сам объект. Я, вероятно, не могу использовать это. Но есть ли супер простая ссылка, которую я могу использовать как универсальную, так как я могу использовать «это» (если меня интересует только экземпляр класса (объекта)? – Steve

+1

@ user2367083 Нет, нет ключевого слова или ярлыка, чтобы определить, что Вы можете использовать 'nameof', но вам нужно будет вставить имя класса и/или метода - нет способа в целом извлечь тип объявления. –

+0

Существует способ, которым вызываемый метод может знать/выводить контекст вызывающего метода (без вызова метода, посылающего вызываемый класс его информации)? (((я предполагаю, что нет))) – Steve