不使用ForEach循环遍历列表

8

我有一个字符串的列表列表:

var list = new List<string> {"apples","peaches", "mango"};

有没有一种方法可以通过使用lambda和delegate而不是foreach循环来迭代列表并在控制台窗口中显示项目。
我希望输出如下,每个都在新行中: 以下水果可用: 苹果 桃子 芒果

为什么你想要在没有foreach的情况下做这件事? - Philip Kendall
这里有一个提示:获取长度并从0迭代到长度-1。 - Hugo Dozois
3
有数十种方法可以做到这一点。什么是需求,为什么 foreach 不能满足它们? - Oren Melzer
将列表中的所有字符串使用LINQ连接起来。 - hatchet - done with SOverflow
7个回答

22
你可以使用String.Join来连接所有行:
string lines = string.Join(Environment.NewLine, list);
Console.Write(lines);

11

迄今为止,最明显的方法是老式的for循环:

for (var i = 0; i < list.Count; i++)
{
    System.Console.WriteLine("{0}", list[i]);
}

好的,对我来说这是最清晰的版本,我最喜欢它。谢谢。 - Combine

3

我非常喜欢linq的这个特定方面

list.ForEach(Console.WriteLine);

这并不是使用 ForEach 循环,而是使用 ForEach actor。但它仍然是一次迭代。


1
请注意,List<T>.ForEach 不是 LINQ 方法,而只是一个普通的老旧的 List<T> 方法;LINQ 方法从来不像 List<T>.ForEach 那样仅仅被调用使用它们的副作用。 - Philip Kendall
是的,从技术上讲我同意,但这些功能通常与LINQ一起打包使用 :-) - Preet Sangha

3
for (int i = 0; i < list.Count; i++)
    {
    Console.WriteLine(list[i])
    }

1

有三种方法可以迭代一个List:

//1 METHOD
foreach (var item in myList)
{
    Console.WriteLine("Id is {0}, and description is {1}", item.id, item.description);
}

//2 METHOD   
for (int i = 0; i<myList.Count; i++)
{ 
    Console.WriteLine("Id is {0}, and description is {1}", myList[i].id, myMoney[i].description);
}

//3 METHOD lamda style
myList.ForEach(item => Console.WriteLine("id is {0}, and description is {1}", item.id, item.description));

方法3的简洁性受到一些开发人员的喜爱,但它的缺点是,如果处理过程在访问所有项之前被缩短,你无法“break” -out of it。 - Zeek2

1
你可以使用List<T>.ForEach方法,它实际上不是LINQ的一部分,但看起来像是:
list.ForEach(i => Console.WriteLine(i));

1

嗯,你可以尝试以下方法:

Debug.WriteLine("The folowing fruits are available:");
list.ForEach(f => Debug.WriteLine(f));

这是与foreach循环非常相似的东西,但不使用foreach关键字。

话虽如此,当迭代对象列表时,我不知道为什么要避免foreach循环。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接