Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中实现重复块的优雅方法#_C#_Loops - Fatal编程技术网

C# 在C语言中实现重复块的优雅方法#

C# 在C语言中实现重复块的优雅方法#,c#,loops,C#,Loops,编码中的一种常见模式是使用迭代变量执行一定次数的操作。在许多情况下,迭代变量仅用作循环终止条件,但为此目的添加了几行代码 例如 int counter=100; while ( counter > 0) { //Do something counter--; } NET framework是否提供了一种定义编码块(在示例中执行某些操作)然后执行给定次数的方法,从而消除了上述条件检查和递减语句。这是为了减少可见语句的数量 编辑:我正在寻找减少代码数量的方法,而不是使底层调用高效。在.NET

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

例如

int counter=100;
while ( counter > 0)
{
//Do something
counter--;
}
NET framework是否提供了一种定义编码块(在示例中执行某些操作)然后执行给定次数的方法,从而消除了上述条件检查和递减语句。这是为了减少可见语句的数量


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

在.NET Framework中,没有任何选项可以在不记录已执行某项操作的次数的情况下执行N次

但是您可以编写自己的扩展来隐藏所有这些内容。例如

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(DoSomething);
怎么了

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

这是一个可以立即识别的习语

你可以使用
枚举。重复来做这个把戏,不确定这是否真的是你所认为的优雅

编辑:

这个小例子演示了如何用这个方法生成100个不同的随机值。只要稍加调整,它就能满足你的需要

var ran = new Random();  
var results = Enumerable.Repeat<Func<int>>(ran.Next, 100)
    .Select(f => f())
    .ToArray();
资料来源(更多详情):


这将是(…{…}语句的
对于每个
+
lambda函数
?C#中的
for
循环。net运行时通常会展开简单的循环,这意味着实际上比较少,循环速度略有加快。在代码中,条件检查和减量大约有0%的可能性是性能问题,您几乎可以肯定有更好的事情要做,如果你一开始确实有性能问题。请定义“优雅”。你还有一个“递减语句”和“条件检查”@flaZer:and?你可以自己展开循环,也可以让.net运行时展开循环。@flaZer:好吧,OP确实抱怨过“为此目的添加了几行代码”,这会节省时间。我不记得OP抱怨过,也没有要求减轻他的代码,而是询问是否可以做些什么,它似乎不是。嗯,但是变量声明和初始化仍然在这里
int counter=0
,计数器增量也在这里
counter++
以及条件validation@flaZer:这是由(Sergey)库函数提供的,而不是最终程序员必须编写的东西。所以它确实回答了这个问题。OP并没有建议递减和条件检查是不必要的,只是他不想为每个循环编写它。根据另一篇文章,我想要的方式不能完全实现,但这是最接近可接受的答案。它是
可枚举的。重复
而不是
IEnumerable。重复
,但它也会按顺序重复一个对象,它不会重复执行一个动作,就像这里被问到的那样。我编辑了我的答案,你可以再看一下(在我的手机上,很难写出完整的答案,我不应该这样),所以你编辑了你的答案,让它执行一大堆完全不必要的工作(不需要随机数,也不需要创建数组)你仍然没有按照问题的要求去做,也就是在给定的次数内执行某些代码,而是在创建给定数量的对象。这不是问题的要求。伙计,你能试着理解一下吗?代码的示例只是展示如何绘制100个随机值。你可以替换
ran.Next
调用你想看什么就看什么。你读过我链接的文章吗?编辑过。你能承认我的答案是正确的吗,现在让我一个人呆着?
var ran = new Random();  
var results = Enumerable.Repeat<Func<int>>(ran.Next, 100)
    .Select(f => f())
    .ToArray();
Enumerable.Repeat(100, () =>
{
    // Do what you want
});