2011-07-22 32 views
3

例外がスローされたときに、何がメソッドに渡されるかを知る方法はありますか。 Convert.ToBoolean(string mystring)はFormatExceptionをスローしますか? ここで例外がスローされたときに何がミスリングであったのか知りたいですか?例外のメソッドのパラメータ値を取得

答えて

1

Boolean.TryParseを使用してください。

bool value; 
if(!Boolean.TryParse(myString, out value)) { 
    // it didn't parse 
} 
// it parsed 
2

一般的な例外(またはFormatException)をキャプチャし、値をException.Dataメンバに割り当てる必要があります。または、新しい例外を値で再スローします。 ...

catch (Exception e) 
      { 
      if (e.Data != null) 
       { 
      foreach (DictionaryEntry de in e.Data) 
        Console.WriteLine(" The key is '{0}' and the value is: {1}", 
                de.Key, de.Value);     
       } 
      } 

//それとも単にあなたの文字列を使用して新しい例外をスロー再をキャッチするためにどのようにあなたの余分な情報

catch (Exception e) 
      { 
      e.Data.Add("ExtraInfo", "More information."); 
      throw e; 
      } 

を追加する方法

Exception.Data

を使用して

catch (Exception ex) 
{  
    throw new Exception("My string was" + yourString); 
} 
+1

注: "throw e"を "throw"に置き換えることができますが、新しいユーザーデータを格納している間もスタックトレースは保持されます。 – ahawker

+0

@ Hawker:はい。ありがとう。 – CharithJ

2

tryブロックの上にパラメータまたは変数が宣言されている限り、catchブロック内の変数の値を引き続き取得できます。
例外がスローされたコンテキストを知るには、argumentnullexception/formatexceptionなどの特定の例外を捕捉するか、try/catchブロックのメソッド内で個々の操作をラップする必要があります。

void Method(int i, string j) 
{ 
    bool p; 

    try 
    { 

    } 
    catch(FormatException e) 
    { 
     //value of i, j, p are available here. 
    } 
} 

理想的な方法は、(formatexceptionsなど)、例外がスローされている可能性の状況をチェックし、それらを防ぐためです。それらは高価であり、プロセスの流れを妨げる。

関連する問題