2011-12-06 6 views
0

は、uはメソッドを持っていることを、想像して:のC#、doSomethingの

public void SometimesIFail(string text) 
{ 
    bool everythingOk = true; 
    try 
    { 
     //Anything 
    } 
    catch(Exception) 
    { 
     //Anything 
     everythingOk = false 
    } 


} 

今、私はそのような何かをしたいと思います:

foreach (String text in texts) 
    { 
     if(!SometimesIFail(text)) //If SometimesIFail() Failed (walked into Catch) Do the same for the next TEXT from the List: texts 
     { 
      SometimesIFail(text); // The Next Text - Until iterated through all the texts.. 
      //FROM HERE ON, I HAVE A RECURSIVE CALL, THAT MEANS THAT THIS CODE, MUSTNT BE EXECUTED 
      //Any Code.. 
     } 
     else 
     { 
      //Do Something 
     } 
    } 

いただきました最善の方法とは問題を解く?

EDIT:試験後

(それはOKだったかどうかのチェック)、私はそれはOKだったしませんでした何かを、やりたい:

foreach (String text in texts) 
{ 
    if(!SometimesIFail(text)) 
    { 
      //HERE I will do SometimesIFail(text) for the next text (in foreach) 

      // And here is a Recursive Call which should be called, after the foreach iterated through all the texts.. 
    } 
} 
+3

(SometimesIFail(テキスト場合は、」チェックしていることから、「ブール」から「無効」に変化し始めることができます )) '、SallyはTrue \ Falseを返さなければなりません。 – Shai

+4

あなたの問題が何であるか、何をしようとしているのかを判断することは非常に難しいです... – BoltClock

+0

uローカル変数を設定し、そのフラグをtrue/falseに設定する必要があります。 – eMi

答えて

3

可能な限り例外をバブルアップしましょう。したがって、try/catchをSometimesIFailメソッドから削除し、ユーザーに近いエラーをキャッチします。このような何か:

try { 
    SometimesIFail(); 
    // Do stuff 
} catch { 
    // Tell the user an error has occurred. 
} 

そして、彼らが呼ばれているもののための例外を考慮する行う - 彼らは例外でとフロー制御のために使用すべきではありません。場合によってはクラッシュするようなコードに問題がある場合は、代わりに問題を解決してください。

+0

私が欲しいものではありません。編集したテキストを見てください。 – eMi

+0

実際には、ユーザーにエラーが発生したことを知らせる代わりに、 **何も何もしない**、そして 'foreach'ループはリストの次の項目に進むだけです。しかし、アクションを取らずにエラーを飲み込むことは、実際には貧弱なコードデザインなので、代わりに**問題解決**に集中する必要があります! –

+0

問題を解決できませんWebClientクラスを使用しているため、WebサイトからUrlを取得してURLが失敗する場合があります(404サーバーエラー); – eMi

1

あなたを解決した場合、私はトライキャッチなしだと思います問題があれば、より良い選択肢になるでしょう...

+0

本当にわからないのですか?Try/Catchを削除すると、プログラムがシャットダウンします:) – eMi

0

は、この使用してみてください:最初は

public bool SometimesIFail(string text) 
{ 
    try 
    { 
     //Anything 
     return false; 
    } 
    catch(Exception) 
    { 
     //Anything 
     return true; 
    } 
} 

foreach (String text in texts) 
{ 
    SometimesIFail(text); 
    if(SometimesIFail(text)) 
    { 
     // returned true - exception was thrown 
     SometimesIFail(text); 
    } 
    else 
    { 
     //Do Something 
    } 
} 
0

を私は今、私はわからないんだけど、私はコードスニペットのコメントを読んで、私はあなたが探していたものを知っていたと思いました。ここに私があなたが欲しいと思うものに基づいて私の答えがあります。成功のためにSometimesIFailメソッドをチェックしたいと思っていて、コードが正常に実行された場合は失敗し、次の反復を続行します。ここで私はそのシナリオのためにどうなるのかです:

// Don't use a void here, use a bool 
public bool SometimesIFail(string text) 
{ 
    try 
    { 
     //Anything 
     return true; 
    } 
    catch(Exception) 
    { 
     //Anything 
     return false; 
    } 
} 

....

foreach (String text in texts) 
{ 
    if(SometimesIFail(text)) // Evaluates to true for success 
    { 
     // Do your success matching code 
    } 

    // There doesn't need to be an else condition if you're 
    // only passing to the next iteration 
} 
+0

私の編集された答えを見て、最初の問題が解決されました(試して/キャッチでtrue/false) – eMi

+0

@eMi:申し訳ありません、あなたの編集された答えでは、未使用のブール値がローカライズされているそれだけでは不明です。 –

+0

はい私は真偽を返す必要がありますが、それは私の主な問題ではない...他の問題は重要ですが、今私は応答としてマークした、私はそれを理解するのは難しいかもしれないと思う.. – eMi

関連する問題