誰かがC++__FUNCTION__マクロのC#バージョンのための良い解決策を持っていますか?コンパイラはそれを気に入らないようです。
6 に答える
代わりにこれを使用してみてください。
System.Reflection.MethodBase.GetCurrentMethod().Name
C#にはC ++のようなマクロはありませんが__LINE__
、同等のものがあります__FUNCTION__
私が現在使用しているのは、次のような関数です。
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 に感謝します。
残念ながら、C#にはそのマクロの同等のバージョンはありません。GetCurrentMethodName()ソリューションがC++__FUNCTION__マクロと同等であるとは考えていません。つまり、C++バージョンは名前のコンパイル時の計算であるためです。C#の場合、これは実行時の計算であり、パフォーマンスが低下します。
コストの厳しさについては何も想定していませんが、1つあります
以下は機能するはずですが、コンパイル時ではなく実行時に評価されます。
System.Reflection.MethodBase.GetCurrentMethod().Name