在Lambda表示式中使用迴圈變數

2022-07-23 23:03:22 字數 1564 閱讀 7454

在c#5.0之前,如果在foreach迴圈中的lambda表示式裡使用迴圈變數,那麼你會發現一些意想不到的現象,例子如下:

var integers = new list ;

var actions = new list();

foreach (var integer in

integers)

actions.foreach(action => action());

這段**的輸出並不是所期望的1而是

原因是actions裡的lambda表示式所捕獲的迴圈變數被覆蓋了,而迴圈變數的最後乙個值是4. 解決方法是引入乙個區域性變數來讓lambda表示式捕獲或者使用foreach擴充套件函式:

var action1s = new list();

foreach (var integer in

integers)

action1s.foreach(action => action());

var action2s = new list();

integers.foreach(interger => action2s.add(() =>console.writeline(interger)));

action2s.foreach(action => action());

完整的例子**和輸出結果如下:

在c#5.0中這個行為得到了糾正,下圖是同樣程式的執行結果:

lambda表示式 lambda表示式

1.概述 c 11 中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或 exception 宣告 返回值型別可以看到,lambda 主要分為五個部分 函式物件引數 操作符過載函式引數 muta...

Lambda表示式在迴圈裡的應用

首先介紹的是lambda表示式在foreach中的應用,這裡我們以foreach遍歷string型別的集合為例 collectionnames new arraylist names.add 趙大炮 names.add 張二炮 names.add 殷三炮 names.add 小炮 system.ou...

C 在for迴圈當中使用break 表示式3

for迴圈語句語法格式為 for 表示式1 表示式2 表示式3 for迴圈的執行過程是 使用break的for迴圈 include using namespace std intmain cout break i i endl return0 輸出結果 i 0 i 1 i 2 i 3 i 4 i 5...