C# if/else在两个不同的for循环中迭代同一变量
在if/else条件下,是否有比以下更好(更简洁)的方法来迭代相同集合对象:C# if/else在两个不同的for循环中迭代同一变量,c#,loops,if-statement,C#,Loops,If Statement,在if/else条件下,是否有比以下更好(更简洁)的方法来迭代相同集合对象: bool condition = DetermineConditionValue(); if(condition) { foreach(var v in variables) { PerformAction(v); } else { foreach(var v in variables) { PerformAnotherAction(v);
bool condition = DetermineConditionValue();
if(condition)
{
foreach(var v in variables)
{
PerformAction(v);
}
else
{
foreach(var v in variables)
{
PerformAnotherAction(v);
}
}
有没有更好的方法避免两次写入循环?您可以使用
Action actionToDo=DetermineConditionValue()
? 表演
:进行治疗;
foreach(变量中的var v)
{
行动计划(五);
}
使用指向函数的指针我认为这个问题最终会被标记为吸引了太多的意见,而不是实际的答案。”“更好”本质上是主观的,取决于你想做什么。不过,从性能角度来看,您目前的做法可能比其他方法更好。您可以将if
语句放在foreach
循环中,但实际上我不会太担心。只要代码在阅读时看起来是合乎逻辑的。我所说的“更好”是指不必牺牲性能的更简洁的方式。在循环中使用if
时,您希望在什么样的烂土豆上运行您的代码,从而担心性能差异?两个词:分支预测。好的,还有两个词:投机执行。此外,您还需要将if
的性能成本与执行(另一个)操作的性能成本联系起来,这可能会单独使if
在循环中的整个性能成本变得微不足道。。。
Action<YourParameterTypeHere> actionToDo = DetermineConditionValue()
? PerformAction
: PerformAnotherAction;
foreach(var v in variables)
{
actionToDo(v);
}