在if块内循环

时间:2015-04-19 12:36:46

标签: c# if-statement foreach

以下内容在任何编程语言中都很常见。

  foreach(.....)
  {
         if(...)
           ....
  }

我想知道使用以下内容是否是一个很好的编程习惯。我知道它有效,但看起来有些不整洁。

  if(....)
  {
        foreach(...)
        {
           ...
        }
 }

在某些条件评估为true时迭代集合是必需的。但我从未在任何样本代码中看到过这种情况。简而言之,我从未注意到其他人编写的代码。但是这有效并且给了我想要的东西。但我想避免在if块中写一个循环。

有人可以指出替代方案吗?

1 个答案:

答案 0 :(得分:0)

要么完全没问题,但当然你应该只使用工作的构造

if循环中的foreach语句通常会检查枚举的每个元素的某些属性。在这种情况下,您不能交换语句的顺序,因为您需要为每个元素执行if

例如:

foreach (Foo foo in fooCollection)
{
    if (foo.Name == "ignore me")
    {
        continue;
    }

    Console.WriteLine(foo.Name);
}

另一方面,在循环内检查循环“不变”的条件是浪费的。也就是说,总是有相同的结果。

例如:

bool ignoreAllFoos = true;

foreach (Foo foo in fooCollection)
{
    if (ignoreAllFoos)
    {
        continue;
    }

    Console.WriteLine(foo.Name);
}

那将(通常)无用且效率低下。如果您永远不会处理任何元素,为什么要枚举所有元素?那么在这种情况下,您可以(并且应该)将foreach放在if内:

bool ignoreAllFoos = true;

if (!ignoreAllFoos)
{
    foreach (Foo foo in fooCollection)
    {
        Console.WriteLine(foo.Name);
    }
}

当然,上述例子完全是人为的。但我希望他们说明if循环中的foreachforeach内的if循环之间的区别。编写代码的两种方式实际上做同样的事情,但它们 都是编写代码的有用方法。它只取决于你真正想要的行为。