2

C#メソッドのすべての呼び出し元を取得する方法はありますか:

public string Caller(string str)
{      
  Customer cust = new Customer();
  cust.Firstname = "Peter";
  cust.LastName = "Beamer";
  string t = getName(cust);
  return t;
}

private string getName(Customer customer)
{
  return customer.Firstname +" "+ customer.LastName;
}

戻り値: Caller.

今私が得ることができるのは、EnvDTE.CodeFunctionを使用したメソッド本体のテキストだけです。このコードを解析しようとするよりも、それを達成するためのより良い方法があるかもしれません。

注:現在のメソッドの呼び出しメソッド名を取得したくありません。メソッドの名前を指定すると、渡されたメソッドの呼び出しメソッド名が返されます。

4

3 に答える 3

6
new StackFrame(1, true).GetMethod().Name

リリース ビルドでは、コンパイラは呼び出されるメソッドをインライン化する可能性があることに注意してください。その場合、上記のコードは呼び出し元の呼び出し元を返すため、安全のためにメソッドを次のように装飾する必要があります。

[MethodImpl(MethodImplOptions.NoInlining)]

ソース: https://stackoverflow.com/a/1310148/1714342

于 2013-07-09T12:59:20.730 に答える
5

あまり肯定的ではありませんが、「Caller」を返す必要があるかどうかは誰にもわからないので、あなたが求めていることは理解できます...しかし、おそらくCallerMemberNameAttribute何か助けになるでしょうか?

于 2013-07-09T13:08:32.783 に答える