国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

關于Lambda表達式訪問外部變量

2019-11-14 16:25:19
字體:
來源:轉載
供稿:網友

在《C#高級編程》一書中提到通過Lambda表達式可以訪問Lambda表達式塊外部的變量 ,這是一個很好的功能(類似Js中的 閉包)。但是如果沒有正確的使用,會非常危險。

比如下面的事例中

int someVal  = 5;

Fun<int, int> f = x => x + someVal;

Console.WriteLine(f(3));

我們這個表達式的本意是返回一個數x+5的結果。所以f(3)的結果應該是 3 + someVal = 8。

但是如果以后在不經意中修改了someVal的值,則會出現我們意想不到的結果。

比如:

someVal = 7;

Console.WriteLine(f(3));

此時的打印的結果是10。

特別是當通過多個線程調用Lambda時,我們可能不知道此時someVal的值到底是多少,從而導致不可預知的結果,所以要慎重使用。

 

那么,在Lambda表達式中使用外部變量的原理是什么呢。

原來,在運行Lambda表達式時,編譯器會創建一個匿名類,他可以通過構造函數來傳遞外部變量。該構造函數的參數取決于外部傳遞進來的變量個數。對于上面的表達式,匿名類如下所示:

 

    public class AnonymousClass     {        

    PRivate int someVal;

        public AnonymousClass(int someVal)         {             this.someVal = someVal;         }

          public int Anonymous(int x)         {             return x + someVal;         }

    }

這樣就可以理解為什么Lambda表達式可以使用外部變量了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 固安县| 方山县| 揭东县| 库车县| 绥芬河市| 石狮市| 盖州市| 长岛县| 兴仁县| 福清市| 平昌县| 南宁市| 西华县| 措勤县| 长武县| 阿坝| 兴仁县| 乐平市| 翼城县| 大同县| 腾冲县| 凌海市| 苍南县| 四会市| 措美县| 汕头市| 嵊州市| 礼泉县| 长阳| 徐州市| 定南县| 诏安县| 利津县| 连城县| 依兰县| 和龙市| 隆昌县| 郁南县| 唐山市| 广安市| 潼南县|