2011-04-12 77 views
9

是否有可能用LINQ(.Select))中的lambda表达式代替foreach循环?LINQ的副作用

List<int> l = {1, 2, 3, 4, 5}; 
foreach (int i in l) 
    Console.WriteLine(i); 

要:

List<int> l = {1, 2, 3, 4, 5}; 
l.Select(/* print to console */); 

回答

11

虽然自己实现一个相当容易,但没有任何Linq相当于foreach。

Eric Lippert给出了一个很好的描述here为什么这不是在Linq本身实现的。

但是,如果你的收藏是一个List(这似乎是在你的例子),你可以使用List.ForEach

myList.ForEach(item => Console.WriteLine(item)); 
+0

我刚刚在linq链的末尾添加了'.ToList()',然后'.ForEach(Console.WriteLine)'' – 2017-05-20 14:13:32

2

可以使用List<T>.ForEach方法。

l.ForEach(i => Console.WriteLine(i)); 
1

List.ForEach使用动作委托。从此,这将是正确的选择。

4

对于任何IEnumerable,你可以这样做:

items.Any(item => 
{ 
    Console.WriteLine(item); 
    return false; 
} 

但是,这将是完全错误的!这就像使用鞋子敲击指甲。 从语义上讲,它没有任何意义。