使用列表而不使用foreach子句

时间:2016-05-19 15:56:25

标签: c# foreach

我有一个查询表达式列表,我想使用其中的值,但我不想使用foreach,因为如果找到正确的值,我不希望它再次循环。

var partnerProduct = GetPartnerProducts();
var duesproductP = partnerProduct.ToList();
foreach (var c in duesproductP)
{
     //I wont include all the code in between but there are 3 if clauses
}

我不能使用SingleOrDefault,因为有多个值而且我不能使用firstordefault,因为它只会给我找到它在我之间的所有子句中找到的第一个值。在我的其他方面,我有标准,我可以这样排序:

 var duesproductsB = sectionB.Where(o => o.capg_MinCriteria.Value <= dues).ToList().OrderByDescending(o => o.capg_MaxCriteria).FirstOrDefault();

但现在我不能,因为没有最小值或最大值,返回的唯一值是价格和Id。它适用于第一个选项和最后一个选项,但不适用于第二个选项。第二个if子句不起作用,因为它保持循环并假设错误的答案。请记住,GetPartnerProducts()是一个查询表达式

4 个答案:

答案 0 :(得分:4)

为什么不简单地检查一下这个值是否符合预期,然后突破循环?或者我不正确地理解某事?

答案 1 :(得分:1)

  

但我不想使用foreach,因为如果它找到正确的值,   我不希望它再循环。

如果我理解正确,你想要的是退出foreach循环而不完成整个列表的循环。

您可以这样做:

 foreach (var c in duesproductP)
            {
                 if(somecondition_met)
                    break; //this will exit the for loop
            }

答案 2 :(得分:0)

一旦满足您的条件,只需break

List<bool> conditionsFound = new List<bool> {false,false,false};
foreach (var c in duesproductP)
{
     if(condition1)
     {
         // do something
         conditionsFound[0] = true;
     }
     if(condition2)
     {
         // do something
         conditionsFound[1] = true;
     }
     if(condition3)
     {
         // do something
         conditionsFound[2] = true;
     }

     if(conditionsFound.All())
         break;
}

答案 3 :(得分:0)

或者如果你也想避免使用休息;在满足条件时简单地给出一个return语句。