编码中的一种常见模式是使用迭代变量来执行某些次数的操作。在许多情况下,迭代变量仅用作循环终止条件,但为此目的添加了几行代码。
实施例,
int counter=100;
while ( counter > 0)
{
//Do something
counter--;
}
.NET框架是否提供了一种定义编码块的方法(在示例中执行某些操作),然后执行给定次数,从而删除上面的条件检查和递减语句。这是为了减少可见语句的数量。
编辑:我正在寻找减少代码数量的方法,而不是让底层调用有效。
答案 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
});
来源(详情请见):