2011-04-12 84 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; 
} 

但是,這將是完全錯誤的!這就像使用鞋子敲擊指甲。 從語義上講,它沒有任何意義。