Din7
@Din7
Пытаюсь программировать, CGmaster - ломастер

Как для List.ForEach() определить текущий элемент?

Используя List.ForEach() я работаю по очереди с каждым элементом листа, так? А как определить с каким именно, если мне, допустим, с элементом листа, обладающим определенными свойствами, нужно выполнить определенную операцию?
  • Вопрос задан
  • 672 просмотра
Решения вопроса 1
arusef
@arusef
Novice .NET dev
Метод List<TElement>.ForEach(Action<TElement>) принимает в качестве параметра делегат (то есть, по сути, указатель на функцию), который обрабатывает каждый элемент списка.
Запись такого вида:
var list = new List<int>() { 1, 2, 3 };
list.ForEach(element => { Console.Write(element * element + " "); } );

Выведет на экран следующее: 1 4 9

Этот кусок кода полностью эквивалентен такому:
void Method(){
   var list = new List<int>() { 1, 2, 3 };
   list.ForEach(Square);
}
void Square(int element){
   Console.Write(element*element + " ");
}


Таким образом, и в первом и во втором случае, переменная element является текущим обрабатываемым значением из списка.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
EreminD
@EreminD
Кое-что умею
Принципиально использовать .ForEach()
Вот такой подход можно же
foreach (var item in list)
{
Console.WriteLine(item.property);
}


если все же принципиально, то вот так:
List.ForEach(x => { 
Console.WriteLine(x.property); 
});
Ответ написан
Комментировать
Если именно свойствами, то ForEach вызывает метод с передачей в него элемента списка. В этом методе проверяйте что свойства и ветвите логику. Можете пример описать?
UPD: Если надо сделать только с элементами определённого "свойства" одно и то же (типа не для одних - одно, для других - другое), то надо отфильтровать через Where их по этому свойству перед ForEach
Ответ написан
Комментировать
@dmitryKovalskiy
программист средней руки
Используя List.ForEach вы над каждым объектом коллекции осуществляете некие действия. В принципе вы даже не можете надеяться на то в каком порядке они будут обработаны. Если вам нужно сделать эти действия, только над объектами, удовлетворяющими неким условиям, то сначала вы отбираете эти элементы, а затем вызываете ForEach... т.е. не List.ForEach() , а List.Where.ForEach()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы