2011-07-01 5 views
2

私は彼らが存在しないと知っていますが、代わりがありますか?for-elseとforeach-else文をC#で実装するにはどうすればよいですか?

for (int i = 0; !connected && i < 100; i++) 
{ 
    Thread.Sleep(1);     
} 
else throw new ConnectionError(); 
+6

実際にこれらの魔法の構成が何をするのかを完全に定義していない限り、質問は現実的ではありません。 – leppie

+5

疑わしい[Python](http://docs.python.org/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops)... – BoltClock

+0

私たちにシナリオを教えてくださいこれらの構造を使用したいと思うなら、いつでもあなたのforループまたはforeachループの周りにif - elseを置くことができます。 – Peter

答えて

12

このようなものです:私のことを

foreach(elem in collection) 
{ 
    if(condition(elem)) 
     break; 
} 
else 
{ 
    doSomething(); 
} 

他の唯一のブレークは、foreachループ

のAC#同等物があるかもしれない時に呼び出されていない場合に実行されます。

bool found = false; 
foreach(elem in collection) 
{ 
    if(condition(elem)) 
    { 
     found = true; 
     break; 
    } 
} 
if(!found) 
{ 
    doSomething(); 
} 

出典:The Visual C# Developer Center

4

あなたはthe for-else and while-else constructs in Pythonに言及している場合、foreachの-他this articleで説明し、次の実装とをシミュレートし、基本的なIEnumerable<T>拡張メソッドがあります:このよう

public static void ForEachElse<TSource>(
    this IEnumerable<TSource> source, 
    Func<TSource, bool> action, Action @else) 
{ 
    foreach (var i in source) 
    { 
     if (!action(i)) 
     { 
      return; 
     } 
    } 
    @else(); 
} 
4

それが与えたグーグルPythonはforeachの-他のために構築しhttp://www-jo.se/f.pfleger/.net-for-else

public static void ForEachElse<TSource>(
this IEnumerable<TSource> source, 
Func<TSource>, 
bool action, 
Action @else 
) // end of parameters 
{ 
foreach (var i in source) 
    { 
    if (!action(i)) 
     { 
     return; 
     } 
    } 
    @else(); 
} 
4

確か:

  • 使用する他のポスター

  • 使用ループを実行する方法によって、空想の提案の一つ、代わりのbreak、あなたがreturnループ

  • 使用あなたが設定できるブール変数の下のコードを実行しないようにすることができますあなたbreak、および試験前のそのループの後

  • 利用goto代わりのbreak

あなたが私に尋ねるならば、それは奇妙なパターンです。 「Foreach」は常に開始され、「else」という単語は意味をなさない。

+2

Aaargh - Goto。本当に?

+0

@JonEgerton、私はここでgotoを使いませんが、私はそれを非難しません。 python for-else構文は特別なケースの 'goto'です。独自のgotoをロールした場合でも、フローの制御は同じで、コードをスパゲティにしていません。 Toubleは、あとで変更したときに誤ってスパゲティにする可能性があるということです。 –

+0

私はgotoの提案が似ていますが、他のコードも入力できる点が異なります。 – ArtOfWarfare

関連する問題