泛型 - 在List <t> </t>中的每个对象上调用一个方法

时间:2010-07-07 19:16:58

标签: c# generics

有没有办法在List中的每个对象上调用一个方法 - 例如

而不是

List<MyClass> items = setup();

foreach (MyClass item in items)
   item.SomeMethod();

您可以执行类似

的操作
foreach(items).SomeMethod();

内置任何东西,扩展方法,还是我只是太懒了?

4 个答案:

答案 0 :(得分:46)

是的,在List<T>上,有:

items.ForEach(item => item.SomeMethod())

奇怪的是,这仅适用于List<T>,而不是IList<T>IEnumerable<T>

要解决此问题,我想添加以下扩展方法:

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

然后,您可以在实施IEnumerable<T>的任何内容上使用它...而不仅仅是List<T>

答案 1 :(得分:15)

items.ForEach(i => i.SomeMethod());

答案 2 :(得分:4)

列表采用ForEach方法。您还可以创建IEnumerable扩展方法but it kind of goes against the spirit of Linq

答案 3 :(得分:1)

如果您需要使用MyMethod更改MyClass上的属性,请使用Jon Skeet的morelinq library

中的“管道”方法
try

可能性无穷无尽! :)