以下内容在任何编程语言中都很常见。
foreach(.....)
{
if(...)
....
}
我想知道使用以下内容是否是一个很好的编程习惯。我知道它有效,但看起来有些不整洁。
if(....)
{
foreach(...)
{
...
}
}
在某些条件评估为true时迭代集合是必需的。但我从未在任何样本代码中看到过这种情况。简而言之,我从未注意到其他人编写的代码。但是这有效并且给了我想要的东西。但我想避免在if块中写一个循环。
有人可以指出替代方案吗?
答案 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
循环中的foreach
与foreach
内的if
循环之间的区别。编写代码的两种方式实际上不做同样的事情,但它们 都是编写代码的有用方法。它只取决于你真正想要的行为。