![](/img/trans.png)
[英]c# Generics: Passing List<string> to a method that expects a List<T>
[英]Generics - call a method on every object in a List<T>
有沒有辦法在List中的每個對象上調用一個方法 - 例如
代替
List<MyClass> items = setup();
foreach (MyClass item in items)
item.SomeMethod();
你可以做點什么
foreach(items).SomeMethod();
內置任何東西,擴展方法,還是我只是太懶了?
是的,在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>
ANYTHING上使用它...而不僅僅是List<T>
items.ForEach(i => i.SomeMethod());
列表具有ForEach方法。 你也可以創建一個IEnumerable擴展方法, 但它違背了Linq的精神 。
如果您需要使用MyMethod更改MyClass上的屬性,請使用Jon Skeet的morelinq庫中的“Pipe”方法
items = items.Pipe<MyClass>(i => i.Text = i.UpdateText()).ToList()
可能性是無止境! :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.