C#语法 - Lambda表达式的示例 - 通用列表上的ForEach()

Bud*_*Joe 36 .net c# syntax lambda

首先,我知道List<>框架中已有的泛型类的方法会迭代List<>.

但是作为一个例子,编写ForEach方法迭代List<>a Console.WriteLine(object.ToString())的每个对象并对每个对象执行操作的正确语法是什么.一些把该List<>作为第一个参数和lambda表达式作为第二个参数.

我见过的大多数示例都是作为扩展方法完成的,或者涉及LINQ.我正在寻找一个简单的方法示例.

Mat*_*ton 59

public void Each<T>(IEnumerable<T> items, Action<T> action)
{
    foreach (var item in items)
        action(item);
}
Run Code Online (Sandbox Code Playgroud)

......并且这样称呼它:

Each(myList, i => Console.WriteLine(i));
Run Code Online (Sandbox Code Playgroud)

  • Func <>委托是具有返回值的方法的泛型委托.Action <>委托是具有返回值的方法的泛型委托.这是唯一的区别. (12认同)

Pea*_*nut 35

上面也可以用较少的代码编写:

new List<SomeType>(items).ForEach(
    i => Console.WriteLine(i)
);
Run Code Online (Sandbox Code Playgroud)

这将创建一个通用列表并使用IEnumerable填充它,然后调用列表对象ForEach.


Mau*_*res 30

这是你要的吗?

int[] numbers = { 1, 2, 3 };
numbers.ToList().ForEach(n => Console.WriteLine(n));
Run Code Online (Sandbox Code Playgroud)

  • 好的,但我们必须考虑到 ToList() 是一个 O(n) 操作 (3认同)

小智 13

public static void Each<T>(this IEnumerable<T> items, Action<T> action) {
foreach (var item in items) {
    action(item);
} }
Run Code Online (Sandbox Code Playgroud)

......并且这样称呼它:

myList.Each(x => { x.Enabled = false; });
Run Code Online (Sandbox Code Playgroud)

  • 一个加号,用于显示在Each中执行多个操作的方式。 (2认同)