【问题标题】:Looping through a method without for/foreach/while循环一个没有 for/foreach/while 的方法
【发布时间】:2010-03-17 13:26:52
【问题描述】:

有没有不使用 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)

这很有效,但在自命不凡的规模上得分很高,我相信我的同龄人不会赞成。

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

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

【问题讨论】:

  • 坚持使用 for 循环。这样每个人都知道它是什么。
  • 嗯,你想执行相同的代码 6 次?您只是想浪费时间,还是执行的代码有副作用?无论哪种情况,都让你感到羞耻。
  • 我真的看不出 for 循环有什么不干净的地方。
  • 方便@Mark,看看你最近的旧代码吗?
  • 没有计数器怎么知道已经完成了多少次迭代?

标签: c# for-loop


【解决方案1】:

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

【讨论】:

  • 我 100% 同意,但我会删除 numberOfIterations,因为它并没有真正让它更清晰。
  • 我仅将其用作问题中假示例的一部分。但有效点
【解决方案2】:

通过将其作为扩展方法,您可以在自负量表上获得更高的分数:

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

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

【讨论】:

  • 爱它...必须找个借口来使用它:)
  • 真的很好。这几乎很诱人:p
  • 这绝对是要走的路。我们已将其作为我团队的标准。
【解决方案3】:

看不到循环

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)();

【讨论】:

    【解决方案4】:

    做一个怎么样....直到或如果...然后

    在循环中使用一个计数器并让它循环直到计数器达到 6。

    或带有计数器的 if-then 语句。如果您的值为 6,则跳出循环。

    我不是编程专家,但如果您有需要执行一定次数的操作,则在某处需要一个计数器,无论它是您的循环的功能还是必须使用计数器创建。

    【讨论】:

      猜你喜欢
      • 2021-04-22
      • 2012-10-02
      • 1970-01-01
      • 2015-06-16
      • 2012-10-20
      • 2017-07-14
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      相关资源
      最近更新 更多