2017-02-28 10 views
0

Actionをインラインで宣言されたパラメータとして渡すと、例外がスローされたときに正しい行番号が得られません。例えば、私はこの機能を宣言した場合:パラメータ化されたアクションから例外行を取得する

public static void Do(Action action) 
{ 
    //do some things 
    action(); 
    //do some things 
} 

をし、このようにそれを呼び出す:返す例外が実際に投げたラインを私に教えてくれないラインHelper.Do(() => {を参照します

Helper.Do(() => { 
    int x = 1; 
    x++; 
    x = x/0; 
    x--; 
}); 

エラー。このパターンを使用しているときに正しい行番号を取得する方法はありますか?

+0

です:これは私のテストコードはでしたか? – JohanP

+0

私はそれを 'try catch 'の中に入れたり、アプリケーション全体をクラッシュさせたりすることもできます。例外のスタックトレースはどちらの場合も' Helper.Do'行番号を指します。 –

答えて

1

コードをテストしたところ、Exceptionが発生した正確な行番号が表示されます。

static void Main(string[] args) 
    { 
     try 
     { 
      Helper.Do(() => { 
       int x = 1; 
       x++; 
       x = x/0; 
       x--; 
      }); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e); 
      throw; 
     } 
} 

e.Message = "Attempted divide by zero"

e.StackTrace = at ConsoleApplication1.Program.<>c.<Main>b__1_0() in C:\test\ConsoleApplication1\ConsoleApplication1\Program.cs:line 46 at ConsoleApplication1.Helper.Do(Action action) in C:\test\test\ConsoleApplication1\ConsoleApplication1\Helper.cs:line 14 at ConsoleApplication1.Program.Main(String[] args) in C:\test\test\ConsoleApplication1\ConsoleApplication1\Program.cs:line 43

ライン46スタックトレースの ``してみてくださいcatch`内部Helper.Do` x = x/0;

+0

ああ、あなたはそれを持っています。私がしていたことは、私が見ていた振る舞いを引き起こすと思われる「Do」メソッドの中から再スローされていることを理解しました。ありがとうございました –

関連する問題