好吧,好吧,我说我有一个可变的项目清单。它可以是任意数量的项目。每个项目可以是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
}
但是我总是觉得使用计数变量来做这样的事情很便宜。有什么我可以做的事情并不像管道一起录制解决方案吗?
答案 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 /便利函数来操作列表只需要一个布尔值,你只需要迭代一次列表。