2012-03-01 7 views
1

アムはちょうどここに私のコードで、どのように私のシナリオを回避するために思っていboolean値がfalseまたは条件が値を返さない場合、Catchを呼び出す方法は?

try 
      { 
       bool b; 
       foreach (string file in files) 
       { 

        #region donloadfiles 
        if (b = file.Contains(story)) 
        { 
         try 
         { 
          logger.Info("calling xml creation Method"); 
          baseMeta(story, XML); 
          logger.Info("XML created"); 
         } 
         catch (Exception ex) 
         { logger.Error(ex.Message); throw; } 

         logger.Info("calling Download Method"); 
         Download(file, story, xml, program); 
         logger.Info("Download Method processed successfully"); 
        } 
        #endregion 
       } 


      } 

      catch (Exception ex) 
      { logger.Error(ex.Message); throw; } 

約束したように、ここで私の主な方法は、catchブロックにしてみてください含まれている

try 
      { 

       //update the status here in DB 
       Status = "Closed"; 
       Update(status); 
      } 

      catch (Exception ex) 
      { 

       Status = "Failed"; 
       Update(status); 
       break; 
      } 

私は、ディレクトリ「などを持っている:Cを: \ "私のgetlistメソッドはすべてのレコードを取得してforeachループに渡します" foreach(ファイル内の文字列ファイル) "次に条件があります

if(b = file.Contains(story))ifファイルは "ストーリー"の名前を持っているいくつかのロジックinside.this thi ngはうまくいく。

ファイルのどれもが一致しない場合、強制的にキャッチを呼び出してメインキャッチにスローする必要があります。メインキャッチでロジックを更新しています。

私はこのシナリオを回避する方法を教えてください。ファイルのどれもが一致されていない場合は、その後、私は強制的に漁獲量を呼び出し、メインキャッチに投げるために を持っている、中にいくつかの ロジックの更新をやって何をしようとしています事前

+2

キャッチには依存しないでください。パフォーマンスでは非常に貧しいので。 CLRは、例外を発生させ、それを処理/捕捉する上で、より多くの仕事をしなければなりません。代わりに、キャッチに応じてロジックを変更してください。 このようにしたい場合は、throw(..)文を使用します。 – Zenwalker

答えて

3

感謝私の主なキャッチ。

bool anyMatch = false; 

foreach (.....) 
{ 
     if (b = file.Contains(story)) 
     anyMatch = true; 
} 

if(!anyMatch) 
    throw ... //this will be caught by main catch 

foreachループの外側にブール変数を保ちます。ファイルが一致する場合はtrueに設定します。 foreachループスロー例外の最後にfalseの場合

+0

、タイムリーなヘルプに感謝します。 – Usher

1

アッシャー、例外を使用してプロセスフローを管理することは悪い考えです! エラーを管理し、コードの実行に予想される条件を処理しないことは例外です。

もっと良い方法(長期的には:これを信頼してください)は、例外をスローするのではなく、ファイルが一致しないときにメソッドから値を返すことです。以下のような

何か:

#region donloadfiles 
        if (b = file.Contains(story)) 
        { 
         try 
         { 
          logger.Info("calling xml creation Method"); 
          baseMeta(story, XML); 
          logger.Info("XML created"); 
         } 
         catch (Exception ex) 
         { logger.Error(ex.Message); throw; } 

         logger.Info("calling Download Method"); 
         Download(file, story, xml, program); 
         logger.Info("Download Method processed successfully"); 
        } 

else return "no matches found"; 
         #endregion 

、あなたは、このメソッドを呼び出した場所に「何の一致が見つからない」値を得てたらそこからプロセスを扱います。

+0

@ casllisto、私は厳密にあなたのアイデアと "zenwalker"に従うと仮定しますが、私のシナリオは、ファイルが一致しなければ、プロセスを停止してメインメニューに戻ります。メインメニューにキャッチブロックブロック私はファイルのステータスについての私のdbを更新する "ファイルをダウンロードできませんでした"確信しているかどうかは確かですが、もし人が私の主なキャッチブロックでOPを更新します。 – Usher

+0

@ castllisto、私の主なキャッチメソッドを投稿した後、アドバイスをお願いできますか?またはまだ私は完全にキャッチを呼び出すことを避ける必要がありますか?前もって感謝します – Usher

関連する問題