如果您从未尝试过这行代码,请执行某些操作

时间:2012-09-25 16:59:22

标签: c#

好吧,好吧,我说我有一个可变的项目清单。它可以是任意数量的项目。每个项目可以是0,1,2,3, or 4。所以我做了一个循环。

foreach(item in allitems)
{
    if (item == 0) continue;
    do stuff for items 1-4.
}

让我们说它经历的每一个项目都是0.那么如果我想在这种情况下执行特定的代码行呢?当然我可以做点像

int count = 0
foreach(item in allitems)
{
    if (item == 0) {count++; continue;}
    do stuff for items 1-4.
}
if(count == allitems.Count())
{
    do stuff
}

但是我总是觉得使用计数变量来做这样的事情很便宜。有什么我可以做的事情并不像管道一起录制解决方案吗?

4 个答案:

答案 0 :(得分:3)

您可以使用Enumerable.All检查列表中的所有项目是否满足条件。

在这种情况下类似

if (allItems.All(i => i == 0) {
   //do stuff
}

顺便提一下,在您的示例中,您有(if item = 0),这应该是if (item == 0)

答案 1 :(得分:3)

此处无需使用计数 - 只需保留一个标记,如果超过支票,则设置该标记,而不是 支票:

bool anyNonZeroItems = false;
foreach(item in allitems)
{
    if (item == 0)
    {
        continue;
    }
    anyNonZeroItems = true;
    // Whatever else
}
if (!anyNonZeroItems)
{
    // Everything was 0 (or the collection was empty)
}

答案 2 :(得分:1)

您目前拥有的是完全可以接受的。我一直都在使用这种模式。

我建议的一件事就是将count变为bool,除非count == 11 and计数>之间存在实际差异。 1`

答案 3 :(得分:1)

这是一个非常常见的问题,但你提出了一个奇怪的解决方案。为什么不使用布尔值来表示状态?

bool branchExecuted = false;
foreach(item in allitems)
{
    if (item == 0)
    {
      branchExecuted = true; 
      continue;
    }
    //do stuff for items 1-4.
}

if(!branchExecuted)
{
    //do stuff if we never hit that line
}

使用它而不是LINQ /便利函数来操作列表只需要一个布尔值,你只需要迭代一次列表。