2011-05-18 26 views
2

私は例外がキャッチされた直後に中断する必要があるC#でアプリケーションを構築しました。 returnを使用しましたが、このモジュールを呼び出したモジュールに戻って実行を継続しました。何をすべきか?例外が処理された後にブレークする必要があります

私のコードが好き、このように見える:

class a 
{ 
    b bee=new b{}; 
    bee.read(name); 
    bee.write(name);// don want this to get executed if exception is thrown 
} 

class b 
{ 
    read(string name) 
    { 
     try{} 
     catch 
     { 
      //caught; 

      //what should be put here so that it just stops after dialog 
      // box is shown without moving to the write method? 

     }  

     write(string name) {}     
    } 
} 
+0

あなたのサンプルが間違っていてコンパイルされない場合は、有効なコードサンプルを入力してください – Dyppl

+1

'break'とはどういう意味ですか?アプリケーションを終了する必要がありますか?または、しばらくの間休止する? – Oded

+0

例外が検出されたときにアプリケーション全体をシャットダウンしますか? – Dyppl

答えて

1

あなたのコードサンプルが正しくないですが、あなたが内側にこのコードで方法を持っていると仮定しますがあります。その場合は

void M() 
{ 
    b bee=new b(); 
    bee.read(name); 
    bee.write(name);// don want this to get executed if exception is thrown 
} 

、あなたが例外をキャッチしなければならないがこのメソッドは、readメソッドではありません。同様に、

void M() 
{ 
    try { 
     b bee=new b(); 
     bee.read(name); 
     bee.write(name);// don want this to get executed if exception is thrown 
    } 
    catch(Exception e) { 
     // Proper error handling 
    } 

} 

readメソッドでは、例外を抑制しないでください。どちらかをキャッチしたり、それらを再投げたりしないでください(または古い方がInnerExeptionの新しい例外を投げる方が良い)。

このようにメソッドMで例外を処理すると、bee.read(name)のどこかで例外が発生した場合、bee.write(name)という行は実行されません。

0
あなたは、あなたがexceutionを知るのいずれかの方法を持っていません方法で例外をキャッチした場合

class a 
{ 
    b bee = new b(); 
    try 
    { 
    bee.read(name); 
    bee.write(name); 
    } 
    catch(Exception ex) 
    { 
     //handle error here 
    } 
} 

class b 
{ 
    //These are your method implementations without catching the exceptions in b 
    read 
    write 

} 

を次のように

あなたはこれを行うことができますhangindを使わないメソッドの状態は、メソッドから何らかのエラーステータスを出します。それがブーリアンリターンであるか、bでアクセス可能なエラーコードであるかどうか。

0

なぜ、読み込みメソッドが呼び出し元に何かを意味する値を返さないようにしますか?呼び出し元は読み込みからの戻り値を検査し、nullの場合は書き込みを呼び出しません。代わりに、readメソッドは、呼び出し元にreadメソッドが終了した条件を知らせるenum値を返すことができます。

別のオプションとして、呼び出し元はdoNotProceedメソッドを使用してインターフェイスを実装し、次にそれをreadメソッドに渡すことができます。例外読み取りでcaller.doNotProceedを呼び出し、呼び出し元オブジェクト内の内部変数を設定します。これにより、書き込みを続行しないように指示されます。

あなたはたくさんのオプション

1

は、呼び出し元のメソッドまでの例外バブルをしてみましょう:

class A { 

    public void Method() { 
    B bee = new B{}; 
    try { 
     bee.Read(name); 
     bee.Write(name); 
    } catch(Exception ex) { 
     // handle exception if needed 
    } 
    } 

} 

class B { 

    public void Read(string name) { 
    try{ 
     ... 
    } catch(Exception ex) { 
     // handle exception if needed 
     throw; 
    } 
    } 

    public void Write(string name) { 
    } 

} 

注:かのう場合は、代わりに、基本クラスの例外をキャッチするの、より具体的な例外クラスをキャッチする必要があります。 excpetionパラメータを指定しないcatch構文は廃止されました。

0

return文を使用するか、エラーを再度スローして別の親try try catchを置くことができますが、コードを再構成する方が良いでしょう。

関連する問題