“foreach”循环是否可以进行条件检查?

时间:2010-12-02 14:25:25

标签: c# foreach

如果我有一个foreach循环,有没有办法检查一个布尔值?

我不想在foreach()内部检查一次,然后打破例如。我希望foreach对一个集合进行评估,同时评估某些事情是否属实。

例如,我不想这样做:

    IEnumerable<Job> jobs = currentJobs;

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

6 个答案:

答案 0 :(得分:19)

尝试使用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
        */

答案 1 :(得分:15)

你总是可以把它变成for循环。

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

您还需要将作业从IEnumerable更改为IList。我认为IList会更好地满足您的目的。 IEnumerable lazy在您需要之前对元素进行求值,并且不包含关联的集合助手方法。

答案 2 :(得分:11)

不是非常喜欢它,但也许是一些LINQ?

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

答案 3 :(得分:11)

我发现了另一种方法:

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

答案 4 :(得分:5)

我是否正确理解你

  1. 有一系列元素
  2. 想要对每个元素采取一些行动
  3. 但你想打破你遇到的第一个元素是否属实?
  4. 我不明白使用foreach循环的阻力;我会坚持你拥有的或

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

答案 5 :(得分:1)

不,foreach只适用于每个元素。

您可以在常规for(a; b; c)循环中组合多个条件。与for(a; b && x; c)

一样