17

誰かがC++__FUNCTION__マクロのC#バージョンのための良い解決策を持っていますか?コンパイラはそれを気に入らないようです。

4

6 に答える 6

23

代わりにこれを使用してみてください。

System.Reflection.MethodBase.GetCurrentMethod().Name

C#にはC ++のようなマクロはありませんが__LINE__、同等のものがあります__FUNCTION__

于 2008-11-03T18:41:58.837 に答える
8

私が現在使用しているのは、次のような関数です。

using System.Diagnostics;

public string __Function() {
    StackTrace stackTrace = new StackTrace();
    return stackTrace.GetFrame(1).GetMethod().Name;
}

__FUNCTION__ が必要なときは、代わりに __Function() を呼び出します。例えば:

Debug.Assert(false, __Function() + ": Unhandled option");

もちろん、このソリューションもリフレクションを使用していますが、これが私が見つけた最良のオプションです。(リリース ビルドでのトレースではなく) デバッグにのみ使用するため、パフォーマンスへの影響は重要ではありません。

私がすべきことは、デバッグ関数を作成してタグ付けすることだと思います

[ Conditional("Debug") ]

代わりに、しかし私はそれを回避していません。

これを解決してくれた Jeff Mastry に感謝します。

于 2008-12-02T15:08:05.710 に答える
6

残念ながら、C#にはそのマクロの同等のバージョンはありません。GetCurrentMethodName()ソリューションがC++__FUNCTION__マクロと同等であるとは考えていません。つまり、C++バージョンは名前のコンパイル時の計算であるためです。C#の場合、これは実行時の計算であり、パフォーマンスが低下します。

コストの厳しさについては何も想定していませんが、1つあります

于 2008-11-03T18:42:16.807 に答える
5

以下は機能するはずですが、コンパイル時ではなく実行時に評価されます。

System.Reflection.MethodBase.GetCurrentMethod().Name
于 2008-11-03T18:42:15.857 に答える