2010-12-02 14 views
14

ループにforeachループがある場合は、ブール値もチェックする方法はありますか?'foreach'ループが条件チェックを持つことは可能ですか?

foreach()の内部を一度確認してから壊れたくはありません。コレクション上でforeachにしたいと同時に、何かが真であるかどうかを評価します。

例えば、私はしたくない:

IEnumerable<Job> jobs = currentJobs; 

    foreach(Job job in jobs) 
    { 
     if (found) 
      break; 
    } 
+0

あなたは例を提供してもらえますか?私はあなたが何を意味するのか少し曖昧です...つまり、他の人々もおそらく混乱しているでしょう。 –

+0

詳細や例を提供してもらえますか? – LukeH

+1

あなたはforeach(MyList.Where(条件)内のvarアイテム)のようなものを意味します – Kikaimaru

答えて

14

あなたは常にループのためにそれを回すことができます。

for (i = 0; i < jobs.Count && booleanTrue; i++) { 
// do a lot of great stuff 
} 

またIEnumerableからIListにジョブを変更する必要があります。私はIListあなたの目的をより良くするだろうと思う。 IEnumerable lazyは必要な直前に要素を評価し、関連付けられたコレクションヘルパメソッドは含まれません。

+3

コレクションが 'Count'プロパティを提供している場合(おそらく"多くの偉大なことをする "ためにインデックスによる要素へのアクセスを必要とする可能性が高いため)インデクサも可能です。この質問の例は、 'IEnumerable 'を使用しています。 – LukeH

+0

ああ、大丈夫です。彼は私が答えたときにその例を掲示しなかった。私は私の答えを修正しました。 –

1

いいえ、foreachは各要素に対して単純に機能します。

通常のfor(a; b; c)ループで複数の条件を組み合わせることができます。 Like for(a; b && x; c)

9

LINQは大したことではないですが、多分LINQですか?

bool yourBool = false; 
foreach(var item in 
    collection.TakeWhile(x => yourBool)) 
{...} 

+2

これは、休憩ではなく、継続をシミュレートします。 –

+0

@Henk - better? –

+1

@Henk - そして、例が追加されるまでは、意図があいまいだったのです。 –

11

TakeWhileを試してみてください。例から

string[] fruits = { "apple", "banana", "mango", "orange", 
          "passionfruit", "grape" }; 

    IEnumerable<string> query = 
     fruits.TakeWhile(fruit => String.Compare("orange", fruit, true) != 0); 

    foreach (string fruit in query) 
    { 
     Console.WriteLine(fruit); 
    } 

     /* 
     This code produces the following output: 

     apple 
     banana 
     mango 
     */ 
+0

私はこれを2回upvoteしたいと思います。 –

2

私はあなた

  1. は要素
  2. の配列を有していることを正しく理解してるの各要素
  3. で何らかのアクションを取るようにしたいが、あなたがしたいですあなたが遭遇する最初の要素を破り、ある条件が真であるか?

ループの使用に抵抗がないとわかりません。foreachループです。私はどちらかでしょう、あなたが持っているものまたは

foreach(var job in jobs.TakeWhile(x => someCondition(x)) { 
    someAction(job); 
} 
5

固執私は別のアプローチを見つけた:

 foreach (var car in cars) if (!rentedCars.Contains(car)) 
     { 
      // Magic 
     } 
+0

これは答えに違いないと思います。それでも私が探しているものです。ありがとう! – AdorableVB

関連する問題