Подтвердить что ты не робот

Generics - вызов метода для каждого объекта в List <T>

Есть ли способ вызвать метод для каждого объекта в списке - например,

Вместо

List<MyClass> items = setup();

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

Вы можете сделать что-то вроде

foreach(items).SomeMethod();

Что-нибудь встроенное, методы расширения, или я просто слишком чертовски ленив?

4b9b3361

Ответ 1

Да, на 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>

Ответ 2

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

Ответ 4

Если вам нужно изменить свойство MyClass с помощью MyMethod, используйте метод "Pipe" от Jon Skeet библиотека morelinq

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

Возможности бесконечны!:)