通过一个没有for / foreach / while的方法循环

时间:2010-03-17 13:26:52

标签: c# for-loop

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

例如,如果我用于循环:

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)

哪个有效,但在自命不凡的规模上得分非常高,我相信我的同行不会赞同。

我可能只是挑剔而且for循环肯定是最容易识别的,但作为一个学习点我只是想知道是否有(更清洁)替代方案。感谢。

(我看过这个帖子,但它不是相当相同) Using IEnumerable without foreach loop

4 个答案:

答案 0 :(得分:12)

实际上,for循环并不会隐藏您要执行的操作 阅读代码的任何人都已熟悉标准for循环,并会立即了解您正在做什么。

答案 1 :(得分:10)

通过将其作为一种扩展方法,您可以在预张力值上得分更高:

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

但我肯定会坚持使用for循环。这是惯用的,公认的做法。

答案 2 :(得分: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)();

答案 3 :(得分:0)

怎么做...直到或如果......然后

在循环内部使用一个计数器并使其循环直到计数器达到6。

或带有计数器的if-then语句。如果你的值是6,那就突破循环。

我不是编程大师,但是如果你有一个需要完成一定次数的动作,那么在某个地方需要一个计数器,无论它是你的循环的功能还是它必须用计数器创建。