1

C# コードベースには、メソッド名を含むエラー メッセージを作成するメソッドがいくつかあります。コンパイラーにメソッド名を静的に挿入させることはできますか? リフレクションで何かできることは知っていますが、むしろしたくありません。

とりわけ、メソッド名を変更せずに、あるメソッドからの例外処理が別のメソッドにコピーされるという、かなりの数のコピー アンド ペースト エラーが見られます。

    public void Method1()
    {
        try
        {
            DoStuff();
        }
        catch (Exception e)
        {
            HandleError("Method1", details);
        }
    }

"Method1"文字列(および"Method2"最大) を含めるのではなく"Methodn"、コンパイラに現在のメソッド名をそこに挿入するように指示する方法はありますか?

4

4 に答える 4

2

NET 4.5 では、CallerMemberName属性を使用できます。メソッドHandleErrorは次のようになります。

void HandleError(YourDetailsClass details,
                [CallerMemberName] callingMethod = null)

そして、あなたは単に使用します

HandleError(details);
于 2013-10-31T11:22:01.363 に答える
0

1 つの方法は、StackTraceおよびStackFrameクラスを使用System.Diagnosticsしてメソッド名を取得することです。

private void HandleError(Exception ex) {
    var st = new StackTrace ();
    var sf = st.GetFrame (1); // get the previous method that called this
                              // (not this method)

    var previousMethod = sf.GetMethod ();

    var errorMessage = string.Format("Error in method {0} with Exception {1}", 
                           previousMethod.Name,
                           ex.Message);
}

例:

void MyMethod() {
    HandleError(new Exception("Error here"));
}

errorMessage含まれます: Error in method MyMethod with Exception Error here.

于 2013-10-31T11:22:19.217 に答える
0

はい、これで試すことができます:

System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
string methodName = st.GetFrame(0).GetMethod().Name;

そして、実行中のメソッドの名前が表示されます。

于 2013-10-31T11:22:55.527 に答える