2016-06-29 10 views
19

尋ねられ、検索され、期待されましたが、まっすぐな答えを見つけることができません。現在のメソッドの名前を取得するためにnameofを使用しています

C#6.0にはメソッド名を指定してnameofを使用して現在のメソッド名を取得していますか?

私はこのような辞書に私のテスト結果を追加してい:

Results.Add(nameof(Process_AddingTwoConsents_ThreeExpectedRowsAreWrittenToStream), result); 

私はペースト+ラインをコピーすることができますので、私は、明示的にメソッド名を指定する非を持っていないならば、私は好みます実例:

Results.Add(nameof(this.GetExecutingMethod()), result); 

可能であれば、私はReflectionを使用したくありません。

UPDATE

(提案として)これはthis questionの複製ではありません。現在のメソッド名を取得するために、リフレクションなしでnameofを明示的に使用できるかどうかを尋ねています。

Results.Add(new StackTrace().GetFrame(0).GetMethod().Name, result);  
+1

これを使用しないでください:http://stackoverflow.com/questions/44153/can-you-use-reflection-to-find-the-name-of-thecurrently-executing-method? – HimBromBeere

+0

'StackTrace'を使ってそのような情報を得ることができますが、これは遅いです。自動的に何かを達成するには、コード生成(例えば、コンパイラの前に実行して何か他のものに置き換えるツール)やAOP([this](http://stackoverflow.com/q/25803/1997232)を参照)を使用できます。 – Sinatr

+0

これはしませんか? 'System.Reflection.MethodInfo.GetCurrentMethod()。Name' – Zorkind

答えて

47

あなたはnameofを使用することはできません、

StackTrace sTrace= new StackTrace(); 
StackFrame sFrame= sTrace.GetFrame(0); 
MethodBase currentMethodName = sFrame.GetMethod(); 
Results.Add(currentMethodName.Name, result); 

またはあなたが使用することができます:あなたは結果リストに現在のメソッドの名前を追加したい場合は

+0

なぜダウン投票ですか? – user3185569

+0

これはどのように役立ちますか? 'GetCaller'の呼び出し側ではなく、実行メソッドの呼び出し側が必要です。この仕事をするために、すべての潜在的に呼び出し可能なメソッドにオプションのパラメータを追加することを提案している場合を除き、それはまったく恐ろしいものです。 – InBetween

+2

@InBetween OPが "現在のメソッド名を取得する"と述べました。これは彼が言ったこととまったく同じです!現在の実行メソッド名を取得するには、どこからでも呼び出せる 'GetCaller'メソッドが1つだけ必要です。 – user3185569

0

その後、あなたはこれを使用することができますこれを実現するにはどうすればよいでしょうか?

以下は、直接反射を使用せず(nameofのように)、expli citメソッド名。

Results.Add(GetCaller(), result); 

public static string GetCaller([CallerMemberName] string caller = null) 
{ 
    return caller; 
} 

GetCallerそれを呼び出す任意のメソッドの名前を返します。

+3

メソッドがインライン化されている可能性があるため、信頼性が低い可能性があります。私はそれがかなり遅いと期待します。 – svick

+0

一般的には、これらのクラスをプロダクションコードで使用しないでください。 –

+1

'System.Reflection.MethodInfo.GetCurrentMethod()はこれをより簡単に(そしておそらくより速く)実行します。 – GreatAndPowerfulOz

関連する問題