C# 是否可能使用';foreach&x27;循环以进行条件检查?

C# 是否可能使用';foreach&x27;循环以进行条件检查?,c#,foreach,C#,Foreach,如果我有一个foreach循环,有没有办法也检查布尔值 例如,我不想在foreach()中检查一次,然后中断。我想对一个集合进行foreach,同时评估某个集合是否正确 例如,我不想做: IEnumerable<Job> jobs = currentJobs; foreach(Job job in jobs) { if (found) break; } IEnumerable作业=当前作业; foreach

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

例如,我不想在
foreach()
中检查一次,然后中断。我想对一个集合进行
foreach
,同时评估某个集合是否正确

例如,我不想做:

    IEnumerable<Job> jobs = currentJobs;

    foreach(Job job in jobs)
    {
        if (found) 
            break;
    }
IEnumerable作业=当前作业;
foreach(作业中的作业)
{
如果(找到)
打破
}

您可以随时将其转换为for循环

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

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

不,foreach只对每个元素有效


您可以在(a;b;c)
循环的常规
中组合多个条件。就像(a;b&x;c)的
不是很喜欢它,但可能是一些LINQ

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

尝试使用

从示例中可以看出:

    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
        */
string[]水果={“苹果”、“香蕉”、“芒果”、“橙子”,
“西番莲”、“葡萄”};
IEnumerable查询=
水果.TakeWhile(水果=>String.Compare(“橙色”,水果,真)!=0);
foreach(查询中的字符串)
{
控制台。书写线(水果);
}
/*
此代码生成以下输出:
苹果
香蕉
芒果
*/

我是否正确理解您

  • 有一系列的元素
  • 要对每个元素采取一些操作吗
  • 但是你想在你遇到的第一个元素上突破,这个元素的某些条件是真的吗
  • 我不理解使用
    foreach
    循环的阻力;我要么坚持你所拥有的,要么

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

    我找到了另一种方法:

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

    你能举个例子吗?我对你的意思有点模糊…这意味着其他人可能也很困惑。你能提供更多的细节和/或例子吗?你的意思是类似于foreach(MyList中的var项。Where(condition))您意识到,无论布尔求值是循环声明的一部分,还是在循环开始时中断的
    if
    语句,它们在功能上都是相同的,对吗?对。我很清楚你不想做什么。我不知道您想做什么。这模拟了一个继续,而不是中断。@Henk-公平地说,在添加示例之前,意图是不明确的。只有在集合提供了
    Count
    属性(并且可能还提供了一个索引器,因为“做了很多很棒的事情”之后)时,您才能这样做可能需要通过索引访问元素)。问题中的例子使用的是
    IEnumerable
    ,而这两者都没有。啊,好的。当我回答时,他并没有张贴那个例子。我已经确定了答案。我想这应该是答案。这就是我要找的。谢谢注意,这只是单语句控制流;i、 例如,只有一个嵌套在
    foreach
    中的
    if
    语句,没有括号