如果/否则在两个不同的for循环中迭代相同变量

4

在 if/else 条件语句中,有没有比以下更简洁的方式来迭代同一个集合对象:

bool condition = DetermineConditionValue();

if(condition)
{
    foreach(var v in variables)
    {
        PerformAction(v);
    }
else
{
    foreach(var v in variables)
    {
        PerformAnotherAction(v);
    }
}

有没有更好的方法来避免重复编写循环?

使用函数指针 - J. Smith
2
我认为这个问题最终会被标记为吸引太多观点,而不是实际答案。 “更好”本质上是主观的,并取决于您想要做什么。尽管如此,您目前的方法在性能方面可能比其他替代方法更好。 - Phil M
2
好的,你可以把 if 语句放在你的 foreach 循环里面,但是我觉得不用太担心。只要代码在阅读时看起来合乎逻辑就行了。 - Ben
我所说的更好是指更简洁的方式,而不必牺牲性能。 - A.Fakhry
@Ben 我不想在循环的每次迭代中执行条件,因为条件不会改变。 - A.Fakhry
2
你在想要在什么样的烂土豆上运行你的代码,以至于你担心在循环内部有if语句会导致性能差异?两个词:分支预测。好吧,再来两个词:推测执行。此外,你需要将if语句的性能成本与执行Perform(Another)Action的性能成本相比较,这可能使得循环内部的if语句的整个性能成本微不足道... - user2819245
1个回答

9
您可以使用 Action<T>
Action<YourParameterTypeHere> actionToDo = DetermineConditionValue()
      ? PerformAction 
      : PerformAnotherAction;

foreach(var v in variables)
{
    actionToDo(v);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接