web-dev-qa-db-ja.com

nameofを使用して現在のメソッドの名前を取得する

閲覧、検索、希望しましたが、直接的な答えを見つけることができません。

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

次のような辞書にテスト結果を追加しています。

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

メソッド名を明示的に指定する必要がないので、行をコピーして貼り付けることができます。

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

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

[〜#〜] update [〜#〜]

これは(提案されているように) この質問 の複製ではありません。現在のメソッド名を取得するためにnameofを使用せずに(!)リフレクションを明示的に使用できるかどうかを確認しています。

30
Marcus

nameofを使用してそれを達成することはできませんが、この回避策はどうですか:

以下は(nameofのような)直接リフレクションを使用せず、明示的なメソッド名も使用しません。

Results.Add(GetCaller(), result);

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

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

74
Zein Makki

User3185569の素晴らしい答えに基づいて:

_public static string GetMethodName(this object type, [CallerMemberName] string caller = null)
{
    return type.GetType().FullName + "." + caller;
}
_

その結果、どこでもthis.GetMethodName()を呼び出して完全修飾メソッド名を返すことができます。

4
Mike Cole