繁体   English   中英

如何为每个lambda表达式编写一个迭代C#中的数值范围?

[英]How do I write a for each lambda expression to iterate over a numeric range in C#?

我想写一些类似的东西:

(0 .. 7)。ForEach(i => SomeMethod(i))

但要么我找不到正确的语法,要么在C#中这是不可能的。 如果可以,请问正确的语法是什么?

您可以使用Enumerable.Range方法

foreach (var i in Enumerable.Range(0, 7)) SomeMethod(i);

如果您按@Richard建议添加ForEach扩展方法,只需执行以下操作:

Enumerable.Range(0, 7).ForEach(SomeMethod);

要实现您所追求的目标,您需要添加虚幻且众所周知的LINQ ForEach语句。

public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
    foreach(T item in source)
    {
        action(item);
    }
}

用法:

Enumerable.Range(0, 7).ForEach(i => SomeMethod(i));

Enumerable.Range(0, 7).ForEach(i => Console.WriteLine(i.ToString());

Enumerable.Range(0, 7).ForEach(i => 
{
    string oddEven = i % 2 == 0 ? "even" : "odd";
    Console.WriteLine(string.Format("{0} is {1}", i, oddEven));
}

额外阅读

“foreach”vs“ForEach”

Enumerable.Range(0, 7).ToList().ForEach(i => whatever)

你需要ToList ,因为纯IEnumerable没有ForEach (好吧,如果你需要,可以轻松定义自己的。)

或者也许是Enumerable.Range(0, 7 + 1) ,如果你想包括7也是如此。

看看Enumerable.Range();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM