Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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# 泛型-对列表中的每个对象调用方法<;T>;_C#_Generics - Fatal编程技术网

C# 泛型-对列表中的每个对象调用方法<;T>;

C# 泛型-对列表中的每个对象调用方法<;T>;,c#,generics,C#,Generics,有没有一种方法可以对列表中的每个对象调用一个方法 而不是 List<MyClass> items = setup(); foreach (MyClass item in items) item.SomeMethod(); 任何内置的、扩展方法,还是我太懒了?是的,在列表中,有: items.ForEach(i => i.SomeMethod()); items.ForEach(item => item.SomeMethod()) 奇怪的是,这只在列表上可用,

有没有一种方法可以对列表中的每个对象调用一个方法

而不是

List<MyClass> items = setup();

foreach (MyClass item in items)
   item.SomeMethod();
任何内置的、扩展方法,还是我太懒了?

是的,在
列表中,有:

items.ForEach(i => i.SomeMethod());
items.ForEach(item => item.SomeMethod())
奇怪的是,这只在
列表
上可用,而不是
IList
IEnumerable

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

public static class IEnumerableExtensions
{
    public static void ForEach<T>(this IEnumerable<T> items, Action<T> action)
    {
        foreach(var item in items)
            action(item);
    }
}
公共静态类IEnumerableExtensions
{
公共静态void ForEach(此IEnumerable items,Action)
{
foreach(项目中的var项目)
行动(项目);
}
}

然后,您可以在实现
IEnumerable
的任何东西上使用它。。。不仅仅是
列表

列表还有一种方法。您还可以创建IEnumerable扩展方法。

如果需要使用MyMethod更改MyClass上的属性,请使用Jon Skeet的“Pipe”方法

items=items.Pipe(i=>i.Text=i.UpdateText()).ToList()

可能性是无穷的!:)

@Rosarch:没有。请注意,coderush会将此建议作为对foreach(项目中的Varx)x.SomeMethod()的更改@Brian Genisio ya我想我在你评论的同时注意到/修复了…我怎么会错过。ForEach。。。总结我今天的一天!很好的扩展方法。当然,正如那篇帖子上的一位评论员所展示的,有时候ForEach没有(整洁的)替代品。然而,如果只是对容器中的每个对象调用一个或两个方法,那么使用classic foreach确实是一个不错的选择。
public static class IEnumerableExtensions
{
    public static void ForEach<T>(this IEnumerable<T> items, Action<T> action)
    {
        foreach(var item in items)
            action(item);
    }
}
items = items.Pipe<MyClass>(i => i.Text = i.UpdateText()).ToList()