不使用for/foreach/while循环,如何遍历一个方法?

5

有没有一种方法可以多次调用一个方法/代码行,而不使用for/foreach/while循环?

例如,如果我要使用for循环:

int numberOfIterations = 6;
for(int i = 0; i < numberOfIterations; i++)
{
   DoSomething();
   SomeProperty = true;
}

我调用的代码行中没有使用“i”,而且我认为整个循环声明都隐藏了我想要做的事情。对于foreach也是如此。

我想知道是否有一种循环语句可以使用,类似于:

do(6)
{
   DoSomething();
   SomeProperty = true;
}

很明显我只想执行那段代码6次,没有任何与索引实例化和将1添加到任意变量有关的噪音。

作为一个学习练习,我已经编写了一个静态类和方法:

Do.Multiple(int iterations, Action action)

这样做虽然可行,但过于炫耀,我确定我的同行不会赞成。

可能我有点挑剔,循环语句当然是最容易识别的,但作为一个学习点,我只是想知道是否有(更清晰的)替代方案。谢谢。

(我看了一下这个线程,但并不完全相同) 不使用 foreach 循环使用 IEnumerable


4
坚持使用for循环。这样每个人都知道它是什么。 - Mitch Wheat
2
嗯,你想执行相同的代码6次吗?你是在浪费时间,还是执行的代码有副作用?无论哪种情况,都不应该这样做。 - High Performance Mark
我真的看不出一个for循环有什么不干净的地方。 - Charles Boyung
1
马克,慢点儿。你最近看过你的旧代码了吗? - ChaosPandion
@HighPerformanceMark - 喜欢你的评论!其他人需要有点幽默感,尤其是在这样的问题上! - DRBlaise
显示剩余2条评论
4个回答

12

事实上,for循环并没有隐藏你想要做的事情。
任何阅读你的代码的人都已经熟悉标准的for循环,并且可以立即理解你正在做什么。


1
我完全同意,但我会摆脱 numberOfIterations,因为它并没有使情况更加清晰。 - ChaosPandion
我只是在问题的虚假示例中使用了它。但是这是一个有效的观点。 - RichK

10

你甚至可以将其作为扩展方法,在虚荣度量表上得分更高:

public static void Times(this int iterations, Action action)
{
    for (int i = 0; i < iterations; i++)
    {
        action();
    }
}
...
6.Times(() => {
    DoSomething();
    SomeProperty = true;
});

但我肯定会坚持使用for循环。这是一种惯用的、广为人知的方法。


喜欢它...得找个借口在某个时候使用它 :) - slugster
真不错。差点让人动心了 :p - RichK
1
这绝对是正确的方法。在我的团队中,我们已经将其作为标准。 - DRBlaise

2

没有循环出现

private MethodDelegate MultiMethod(MethodDelegate m, int count) {
  MethodDelegate a;
  if (count > 0) {
    a = m;
    a += MultiMethod(m, --count);
  } else {
    a = delegate { };
  }
  return a;
}

而且你可以得到一个非常优秀的调用语法!

MultiMethod(action, 99)();

0

使用循环计数器并在循环中设置条件,直到计数器达到6时退出循环。

或者使用if-then语句和计数器。如果您的值为6,则跳出循环。

我不是编程大师,但如果您需要执行一定次数的操作,则必须在某个地方使用计数器,无论它是循环的一部分还是必须通过计数器创建。


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