Я создал такой список:

List<int> list = new List<int>();
list.Add(2);
list.Add(3);
list.Add(7);

Теперь, если я хочу повторить его, я должен сделать:

foreach (int prime in list)
{
    Console.WriteLine(prime);
}

Как я могу сделать это с помощью одной строки?

0
Sevengames Xoom 28 Фев 2016 в 16:39

2 ответа

Лучший ответ

Вы можете сделать это с помощью List<T>.ForEach :

list.ForEach(Console.WriteLine);

При этом используется преобразование группы методов для создания Action<int> для вызова Console.WriteLine(int) для каждого элемента list.

Однако лично я бы использовал существующий цикл foreach ... он проясняет, что вы ожидаете побочный эффект для каждой итерации цикла. Эрик Липперт опубликовал отличную запись в блоге в деталях этого философского возражения.

Этот код полностью безопасен - но более «умный», что почти никогда не бывает хорошо, когда вы читаете код. Спросите себя, какой код вы с большей вероятностью поймете с первого взгляда .

Обратите внимание, что это не доступ к данным в списке «без итерации» согласно заголовку вопроса - просто итерация не очевидна в вашем коде. Он определенно все еще присутствует в методе ForEach.

3
Jon Skeet 28 Фев 2016 в 13:49

Вы можете использовать ForEach:

list.ForEach(x => Console.WriteLine(x))
0
Artavazd Balayan 28 Фев 2016 в 13:44