2011-11-01 11 views
5

は "ok"コードですか?それはDB最終的にtry/catchするのは大丈夫ですか?

に接続していますので、これはそう、私には奇妙に見える

 try 
     { /*stuff*/ } 
     catch (Exception e) 
     { /*stuff*/ } 
     finally 
     { 
      try 
      { /*stuff*/ } 
      catch { /*empty*/ } 
     } 

は、私は最終的に、複雑な操作を行う必要があり、それがクラッシュする可能性があります。これは正しい方法ですか?

+4

それは...... ...... –

+6

病状があれば薬を飲んでも大丈夫ですか?ここで空白を記入しましょう。最終的にtry/catchの概念に間違いはありませんが、何をしようとしているのか、最終目標は何かによって、間違っている可能性があります。 – corsiKa

+0

あなたは最終的にあなたが何をするつもりなのかを簡単に教えてくれますか? – Purplegoldfish

答えて

3

これは本当にあなたがやっていることに依存するつもりですが、個人的には、それが本当に他の試行の後にキャッチして操作後に行った場合、私はそれを最終的に入れ子にしません。 。それはその中の「奇妙」の一部を取り除くでしょう。

+0

これは全体の画像(コード)と実際にあなたの権利をもう一度見せてくれます。私の場合は、最後に削除して元のものの後ろにtry/catchを追加する方が良いです。 – Fredou

1

ネストされたtry/catchブロックは理想的ではありませんが、場合によっては必要です。エラーを正しく処理してください。

0

はい。 finallyの例外元の例外を非表示にします。これは推奨not to use using in WCF while creating proxiesに似ていますが、それ自体は別の議論です。この意志出力Bよりもむしろ

:はい

try 
{ 
    /* stuff */ 
} 
catch 
{ 
    /* stuff */ 
} 
finally 
{ 
    DoStuff(); 
} 


void DoStuff() 
{ 
    try 
    { 
     /* stuff */ 
    } 
    catch 
    { 
     /* stuff */ 
    } 
} 
1

Idomaticallyは、あなたはこれを行うだろう。通常、別の例外がアクティブな間に例外をスローすると、最初の例外が2番目の(後の)例外に置き換えられます。

public static void Main(string[] args) 
    { 
     try 
     { 
      try 
      { 
       throw new Exception("first exception"); 
      } 
      finally 
      { 
       //try 
       { 
        throw new Exception("second exception"); 
       } 
       //catch (Exception) 
       { 
        //throw; 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e); 
     } 
    } 
  • は、コードを実行すると、あなたはtryおよびcatch文を参照してください「第二の例外」
  • コメントを解除し、あなたは、「最初の例外」を参照してくださいします:ここでは

    は何が起こるかを説明するいくつかのコードです
  • また、スローのコメントを外します。再度「第2の例外」が表示されます。
+0

これは意味をなさない、私はそれがどのように問題を解決するのか分かりませんし、理想的な状況にはなりません。私はどちらもcatchステートメントは、メソッド内で呼び出される独自のメソッド内にあるべきであると主張します。これらのメソッドは値を返す必要があります。 –

0

static void Main(string[] args) 
    { 
     try 
     { 
      try 
      { 
       throw new ApplicationException("A"); 
      } 
      finally 
      { 
       throw new ApplicationException("B"); 
      } 
     } 
     catch (Exception e) 
     { 

      Console.WriteLine(e.Message); 
     } 
     Console.Read(); 
    } 
関連する問題