通常,我们使用计数器执行类似for或while循环的操作:

for (int i = 0; i < 10; i++)
{
    list.Add(GetRandomItem());
}

但有时你会混淆界限.你可以使用while循环,但是如果你犯了一个错误,这个循环是无限的...

例如,在Perl中,我会使用更明显的

for(1..10){
    list->add(getRandomItem());
}

有大约doitXtimes(10){...}个吗?

推荐答案

您可以轻松编写自己的扩展方法:

public static void Times(this int count, Action action)
{
    for (int i = 0; i < count; i++)
    {
        action();
    }
}

然后您可以写道:

10.Times(() => list.Add(GetRandomItem()));

我不确定我是否真的会建议你do,但这是一个 Select .我不相信框架中有类似的东西,尽管您可以使用Enumerable.RangeEnumerable.Repeat来创建适当长度的惰性序列,这在某些情况下可能很有用.


从C#6开始,您仍然可以方便地访问静态方法,而无需创建扩展方法,使用using static指令导入它.例如:

// Normally in a namespace, of course.
public class LoopUtilities
{
    public static void Repeat(int count, Action action)
    {
        for (int i = 0; i < count; i++)
        {
            action();
        }
    }
}

然后,当你想使用它时:

using static LoopUtilities;

// Class declaration etc, then:
Repeat(5, () => Console.WriteLine("Hello."));

.net相关问答推荐

.NET最小API BadRequest响应不返回正文

无法使用 int.Parse 从字符串转换值

如何调试 .NET 运行时中的内部错误?

关于在 .NET 中干净地终止线程的问题

为什么 StyleCop 建议在方法或属性调用前加上this?

JavaScript 中的IsNullOrWhitespace?

Environment.TickCount 与 DateTime.Now

.NET 应用程序的链接器状态(又名请先生,我可以有一个链接器2009 年版)

Linq查询分组并 Select 第一个项目

C# 中的 myCustomer.GetType() 和 typeof(Customer) 有什么区别?

基于多个字符分隔符拆分字符串

是否有 TLS 1.2 的 .NET 实现?

在安全处理异常时避免首次机会异常消息

.NET 反射的成本是多少?

我可以在没有两个查询的情况下通过布尔标准将 IEnumerable 一分为二吗?

MemoryStream.Close() 或 MemoryStream.Dispose()

等待 Async Void 方法调用以进行单元测试

为什么会出现编译错误使用未分配的局部变量?

如何在 Dapper.Net 中编写一对多查询?

MVC4 HTTP 错误 403.14 - 禁止