2013-10-03 2 views
2

Я использую библиотеку CompilerServices, чтобы получить имя метода вызывающей функции для объяснения причин.CompilerУслуги для имени класса

Что мне было интересно, но возможно ли получить вызывающий класс? Я просмотрел все атрибуты без успеха.

Напрямую от microsoft:

public void TraceMessage(string message, 
     [CallerMemberName] string memberName = "", 
     [CallerFilePath] string sourceFilePath = "", 
     [CallerLineNumber] int sourceLineNumber = 0) 
{ 
    Trace.WriteLine("message: " + message); 
    Trace.WriteLine("member name: " + memberName); 
    Trace.WriteLine("source file path: " + sourceFilePath); 
    Trace.WriteLine("source line number: " + sourceLineNumber); 
} 

Я действительно хочу, чтобы избежать StackFrame кучи.

+1

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

+2

Вы всегда можете предложить это на будущее: http://visualstudio.uservoice.com/forums/121579-visual-studio –

+0

спасибо и сделали :) (http://visualstudio.uservoice.com/forums/121579-visual- студия/предложения/2252418-абонент-инфо-атрибут-callermembernamespace- –

ответ

3

К сожалению, нет. Атрибуты Caller * (по крайней мере в настоящее время) предоставляют только три элемента, которые вы указали, но не тип.

Если вам нужно получить фактический тип, использование информации о стеке - это единственный способ добраться туда.

1

К сожалению, нет никакого способа сделать это. Набор атрибутов, которые вы указали, представляет собой полный набор функций, доступных с помощью функции информации о вызывающем абоненте. Ниже приведена ссылка на подробную страницу, на которой представлены доступные варианты. Имя класса не является одним из них.

http://msdn.microsoft.com/en-us/library/hh534540.aspx

Смежные вопросы