2015-06-18 3 views
-3

Предположим, я вызываю GetMethodB(), который передается как аргумент GetmethodA() и GetMethodAA(). Как получить имя этого метода, который вызывает GetMethodB();Получить имя метода вызывающего абонента

ClassName.GetMethodA(GetMethodB()); 
ClassName.GetMethodAA(GetMethodB()); 
+4

Зачем вам это нужно? Что вы пытаетесь достичь? – David

+0

На самом деле мне нужно получить имя GetMethodA() и GetMethodAA() изнутри GetMethodB(). Надеюсь, это очистит мою проблему. –

+2

Нет, это не совсем ясно. Я подозреваю, что вы пытаетесь перестроить сложное решение проблемы, которая не должна существовать в первую очередь. Но поскольку мы не знаем, что вы на самом деле пытаетесь сделать, я сомневаюсь, что кто-то здесь может оказать большую помощь. С предоставленной информацией я могу только предположить, что вы добавляете параметр «string» к сигнатуре метода и передаете имя метода через этот параметр. Что-то вроде: 'GetMEthodA (GetMethodB (" GetMethodA "))' – David

ответ

-1

Используйте StackFrame

var sf = new StackTrace().GetFrame(1); 
var callingMethodName = sf.GetMethod().Name; 
+2

Это даст ему метод, в котором определяется код, который он показал, но это не то, что он говорит, что хочет. – Servy

+0

Плюс, это может дать совершенно разные результаты в зависимости от кода отладки или выпуска. Вызывающие абоненты могут быть оптимизированы. –

+0

Если он вызывает GetMethodB из GetMethodA, то, что он намеревается сделать, он должен дать GetMethodA. Он получает имя вызывающего метода из стека выполнения. – Kevin

5

Вы не можете сделать это: в то время GetMethodB вызывается, ни GetMethodA, ни GetMethodAA активен.

Последовательность вызова выглядит следующим образом:

  • Ваш метод вызывает GetMethodB(), и получает его результат
  • Ваш метод вызывает GetMethodA(...) передавая ей результат из GetMethodB() вызова
  • Ваш метод снова вызывает GetMethodB(), и получает свой результат
  • Ваш метод вызывает GetMethodAA(...), передавая ему результат второго GetMethodB() звонок

В обоих случаях вызывающим абонентом GetMethodB является ваш текущий метод, из которого выполняется вызов.

Если GetMethodB необходимо знать его вызывающим, то вы должны определить, вызывающий метод в явном виде - например, пути пропускания enum или параметра string.

+0

Попробовали передать дополнительный параметр строки на GetMethodB (index, system.Reflection.MethodBase.GetCurrentMethod(). Name) –

+1

@SantoshThapa Вы ​​пропустили точку ответа: вы не можете сделать это автоматически, потому что контекст недоступен в время вызова. Вам нужно что-то похожее на «ClassName.GetMethodA (GetMethodB (« GetMethodA »)), то есть сообщает' GetMethodB', что его результат будет использоваться в 'GetMethodA'. – dasblinkenlight

0

Эти два метода вызываются с результатом getmethodB, поэтому вызывающий объект getmethodB является тем же самым, что и вызывающий getmethodA и/или getmethodAA. Вы не можете узнать, к какому методу передан результат другого метода.

  • Так первый getMethodB называется,
  • результат захватывается
  • и перешел к другим методам.

Звенья или любые другие трюки здесь не помогут.

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