0

関数内にいるときに関数名とファイル名を取得する方法はありますか?私はそのようにログファイルをあちこちに追加しようとしていますが、特定の関数でログファイルのコード行をコピーして貼り付けることができるようにしたいと考えています。

public class NewCorrGenerator
{
    public void Start()
    {
        bool rc = true;

        myLogFile.InfoToFileWithTime("NewCorrGenerator - Start", appContext);

        etc.....
    }
}

ご覧のとおり、文字列内のクラス名と関数名を取得してmyLogFile関数に出力する方法はありますか?

4

4 に答える 4

1

System.Diagnostics.StackTraceおよびSystem.Diagnostics.StackFrameクラスを使用して、現在実行中のコードに関する情報を取得できます。

var trace = new StackTrace(true);
var frame = trace.GetFrame(0);  // current frame
var lineNumber = frame.GetFileLineNumber();
var method = frame.GetMethod().Name;
var className = frame.GetMethod().ReflectedType.Name;
于 2012-08-29T20:11:31.673 に答える
1

GetCurrentMethodを使用できます。これは type のオブジェクトを返しますMethodBase。メソッドのName名前を取得するプロパティ。 DeclaringTypeクラスを教えてくれます。これはファイル名と同じではありませんが、ファイルごとに 1 つのタイプを使用する場合は近いはずです。

于 2012-08-29T20:09:12.350 に答える
0

必要なものはインターセプターと呼ばれます。このための最も一般的なフレームワークはPostSharpです。必要なすべてを行う商用製品です。自分で書いてみたい方はこちらの記事を参考にしてください

于 2012-08-29T20:02:42.743 に答える
0

リフレクションを使用して、必要なものを取得できます。メソッド名を取得する方法は次のとおりです。メソッド内から呼び出し元のメソッド名を取得する

ただし、インターセプションまたはクラス/メソッド名をハードコードするコード生成のいずれかを行うことを検討します。StackTrace を使用することになった場合は、ロギング コードをコンパイラ デバッグ ディレクティブで囲むことをお勧めします。

于 2012-08-29T20:20:11.237 に答える