簡體   English   中英

泛型 - 在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM