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()