-1

例外をキャッチしました。それをキャッチした後、メソッド名を追加して、エラーの原因となったメソッドを特定し、それを別の関数にスローしてデータベースに保存する必要があります。

try
{
}
catch (Exception ex)
{
    string strError = ex.Message.ToString() + "methodname:getNoOfRecordsForBatchProcess";
    throw strError.ToString();
}  

しかし、文字列変数を使用して例外をスローできないというエラーが表示されます。スロー例外はシステム例外でのみ使用されます。このエラーを処理する方法はありますか。

4

5 に答える 5

5

メソッド名はException.StackTraceプロパティにも表示されます。

ちなみに、次のように、 StackFrame Classを使用してその名前を回復する他の方法に頼ることができます。

        private static string GetCallingMethodName()
        {
            const int iCallDeepness = 2; //DEEPNESS VALUE, MAY CHANGE IT BASED ON YOUR NEEDS
            System.Diagnostics.StackTrace stack = new System.Diagnostics.StackTrace(false);
            System.Diagnostics.StackFrame sframe = stack.GetFrame(iCallDeepness);
            return sframe.GetMethod().Name;
        }
于 2013-02-19T10:39:31.527 に答える
1

あなたの質問への答え:

throw new Exception(strError);

(ただし、他の人が言っているように、これはこれを処理するための最良の方法ではないかもしれません。)

于 2013-02-19T10:47:50.920 に答える
0

私も行きStackFrameます。@Tigranの回答に拡張機能を投稿しています(try{...}catch{...}ブロック内でもう少し明確な使用法を求めたため)、これが使用法を理解するのに役立つ場合は、私のものではなく、彼の回答受け入れてください:

try
{
    int a = 0;
    var r = 1 / a;
}
catch (Exception ex)
{
    throw new Exception(
        String.Format("{0} Method name: {1}",
            ex.Message,
            GetCallingMethodName()),
        ex);
}

GetCallingMethodName:_

private static string GetCallingMethodName()
{
    const int iCallDeepness = 1; //DEEPNESS VALUE, MAY CHANGE IT BASED ON YOUR NEEDS
    System.Diagnostics.StackTrace stack = new System.Diagnostics.StackTrace(false);
    System.Diagnostics.StackFrame sframe = stack.GetFrame(iCallDeepness);
    return sframe.GetMethod().Name;
}

PS @Tigran、必要ないと思われる場合は、この回答を削除します。

于 2013-02-19T11:04:01.743 に答える
0

例外の原因となったメソッドの名前を取得する方法の重複の可能性があります。

catch (Exception ex)
{
   MethodBase site = ex.TargetSite;
   string methodName = site == null ? null : site.Name;
   ...           
}
于 2013-02-19T10:42:01.920 に答える
0

例外をキャッチして再スローする場合は、意味のあるエラー メッセージを含む新しい例外を作成し、元の例外を内部例外として渡すことをお勧めします。

例えば:

catch(Exception ex)
{
  const string message = "Some error message.";
  throw new MeaningfulException(message, ex);
}
于 2013-02-19T10:44:11.293 に答える