Получить метод вызова и метаданные от делегата - PullRequest
2 голосов
/ 01 ноября 2011

Можно ли изнутри данного метода извлечь любую информацию о методе, который его вызвал?

public void MethodOne()
{
   for (int nCount = 0; nCount < 10; nCount++) MethodTwo();
}
public void MethodTwo()
{
   // Can I retrieve here information about the call to MethodOne which originated this call?
}

Например, в этой ситуации я хотел бы иметь возможность знать во время выполнения, что данный набор из десяти вызовов MethodTwo произошел из вызова MethodOne в данном потоке ... Возможно ли это?

Ответы [ 2 ]

2 голосов
/ 01 ноября 2011

Это ужасно:

string caller0 = new StackFrame(1).GetMethod().Name; // MethodOne
string caller1 = new StackFrame(2).GetMethod().Name; // whatever called MethodOne

(это также не бесплатно; любое такое злоупотребление имеет цену производительности)

1 голос
/ 01 ноября 2011

Не легко, хотя возможно, если вы изучите текущую трассировку стека:

using System.Diagnostics;

// ...

StackTrace t = new StackTrace();

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...