9

C#に移行しようとしているC++コードがあります。あちらのC++では、デバッグの目的で次のマクロ定義を使用していました。

#define CODE_LOCATION(FILE_NAME, LINE_NUM, FUNC_NAME) LINE_NUM, FILE_NAME, FUNC_NAME
#define __CODE_LOCATION__ CODE_LOCATION(__FILE__, __LINE__, __FUNCTION__)

C#にも同様の構造がありますか?C#にマクロがないことは知っていますが、実行中に現在のファイル、行、および関数の値を取得する他の方法はありますか?

4

3 に答える 3

14

.net 4.5を使用している場合は、CallerMemberNameCallerFilePathCallerLineNumber属性を使用してこの値を取得できます。

public void DoProcessing()
{
    TraceMessage("Something happened.");
}

public void TraceMessage(string message,
    [CallerMemberName] string memberName = "",
    [CallerFilePath] string sourceFilePath = "",
    [CallerLineNumber] int sourceLineNumber = 0)
{
    Trace.WriteLine("message: " + message);
    Trace.WriteLine("member name: " + memberName);
    Trace.WriteLine("source file path: " + sourceFilePath);
    Trace.WriteLine("source line number: " + sourceLineNumber);
}

古いフレームワークとビジュアル2012を使用している場合は、それらをフレームワーク(同じ名前空間)にあるものとして宣言するだけで機能します。

于 2012-11-14T11:22:52.850 に答える
4

StackFrameはまさにあなたが探しているものだと思います。

于 2012-11-14T11:17:07.753 に答える
3

.NET 4.5には、この目的で使用できる一連の新しい属性があります。発信者情報

于 2012-11-14T11:22:42.287 に答える