在C#中实现重复块的优雅方式

时间:2017-05-31 21:38:29

标签: c# loops

编码中的一种常见模式是使用迭代变量来执行某些次数的操作。在许多情况下,迭代变量仅用作循环终止条件,但为此目的添加了几行代码。

实施例,

int counter=100;
while ( counter > 0)
{
//Do something
counter--;
}

.NET框架是否提供了一种定义编码块的方法(在示例中执行某些操作),然后执行给定次数,从而删除上面的条件检查和递减语句。这是为了减少可见语句的数量。

编辑:我正在寻找减少代码数量的方法,而不是让底层调用有效。

3 个答案:

答案 0 :(得分:3)

错误

for (int counter = 0; counter < limit; counter++)
{
//Do something
}

它是一个立即可识别的成语

答案 1 :(得分:2)

.NET Framework中没有选项可以执行N次操作,而无需跟踪已执行某些操作的次数。

但你可以编写自己的扩展名来隐藏所有这些东西。 E.g。

public static void Times(this int count, Action action)
{
   if (count < 0)
      throw new ArgumentException(nameof(count));

   for(int i = 0; i < count; i++)
      action();
}

用法:

100.Times(() => Console.WriteLine("hello"))

请注意,如果您要将要重复的代码提取到与Action签名匹配的方法中,那么上面的代码就变得更清晰了:

100.Times(DoSomething);

答案 2 :(得分:0)

您可以使用Enumerable.Repeat来制作技巧,不确定它是否真的是您对优雅的看法

编辑:

使用此方法如何生成100个不同的随机值的小例子。经过一些调整后,它可以满足您的需求

var ran = new Random();  
var results = Enumerable.Repeat<Func<int>>(ran.Next, 100)
    .Select(f => f())
    .ToArray();

编辑: 我以为你可以自己做,但有些人需要澄清:

Enumerable.Repeat(100, () =>
{
    // Do what you want
});

来源(详情请见):

http://geekswithblogs.net/BlackRabbitCoder/archive/2012/05/03/c.net-little-wonders-the-enumerable.repeat-static-method.aspx