最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

理解C#中的Lambda表達(dá)式

 更新時(shí)間:2015年04月10日 10:53:50   投稿:junjie  
這篇文章主要介紹了理解C#中的Lambda表達(dá)式,本文用實(shí)例代碼來講解Lambda表達(dá)式,用不同的角度總結(jié)對(duì)它的認(rèn)識(shí),需要的朋友可以參考下

先來看兩段代碼:

復(fù)制代碼 代碼如下:

 Thread t = new Thread(() =>
{
AddIt AddDelegate = new AddIt(AddItem);
this.Invoke(AddDelegate);
});

Thread t3 = new Thread(new ThreadStart(() =>
{
AddIt AddDelegate = new AddIt(AddItem);
this.Invoke(AddDelegate);
}));


 
這兩種寫法都是可以的,出來的IL也一樣,但是意義是不同的,后者相當(dāng)于匿名方法,前者

更像是"匿名"的委托,其實(shí)這樣寫:

復(fù)制代碼 代碼如下:

Thread t2 = new Thread(() =>
{
this.Invoke(new AddIt(() => { this.listBox1.Items.Add("bbb"); }));
});

這個(gè)跟上面兩種寫法也是一樣的效果,初次接觸的時(shí)候,可能大家跟我一樣會(huì)有些迷茫,Lamdba表達(dá)式到底該怎么用呢?

首先還是要弄清Lamdba表達(dá)式的幾個(gè)特性:

1. Lamdba 表達(dá)式是一個(gè)委托類型:

復(fù)制代碼 代碼如下:

  MethodInvoker invoker = () => { Console.WriteLine(); };
//is actually equal to the following form.
  MethodInvoker invoker = delegate() { Console.WriteLine(); };
//這里是Lamdba 表達(dá)式的匿名委托的用法

2. Lamdba 表達(dá)式可以用作匿名方法
復(fù)制代碼 代碼如下:

  MethodInvoker invoker = new MethodInvoker(() => { Console.WriteLine(); });
//相當(dāng)于:
  MethodInvoker invoker = new MethodInvoker(MyFunc);
  partial void MyFunc()
  {
    Console.WriteLine();
  }
 

我們知道, 當(dāng)構(gòu)造一個(gè)新的委托的時(shí)候, 他的構(gòu)造器需要一個(gè)函數(shù)指針作參數(shù),這個(gè)函數(shù)指針是委托類型的
實(shí)際上,當(dāng)我們這樣去new 一個(gè)委托的時(shí)候:

復(fù)制代碼 代碼如下:

  MethodInvoker invoker = new MethodInvoker(MyFunc);
 

"MyFunc" 就是一個(gè)委托,而不只是一個(gè)函數(shù)名的存在. 編譯器將為這個(gè)構(gòu)造函數(shù)生成一個(gè)匿名委托:
復(fù)制代碼 代碼如下:

  MethodInvoker invoker = new MethodInvoker(delegate() { MyFunc(); });
 

可以這樣理解編譯器的行為: 匿名方法其實(shí)也就是委托。

那么為什么我們可以這么寫呢:

復(fù)制代碼 代碼如下:

  MethodInvoker invoker = () => { Console.WriteLine(); };
 

我們來看一看:
首先,這個(gè)委托的構(gòu)造器需要一個(gè)委托參數(shù),所以通常我們得這樣寫:
復(fù)制代碼 代碼如下:

  MethodInvoker invoker = new MethodInvoker(delegate() { MyFunc(); });

但是匿名的delegate 可以轉(zhuǎn)化成函數(shù)指針 (void() target):
 所以這樣寫是可以的:
復(fù)制代碼 代碼如下:

 MethodInvoker invoker = new MethodInvoker(MyFunc);
//而匿名的委托又可以描述為Lambda表達(dá)式
  MethodInvoker invoker = new MethodInvoker(() => { Console.WriteLine(); });

//另外一方面,由于編譯器對(duì)"寬松委托"的支持, MethodInvoker類委托可以轉(zhuǎn)化成匿名類委托:
復(fù)制代碼 代碼如下:

  MethodInvoker invoker = delegate() { Console.WriteLine(); };
//而匿名的委托又可以用Lambda表達(dá)式來描述
  MethodInvoker invoker = () => { Console.WriteLine(); };

從上面,我們可以看到一個(gè)復(fù)雜的委托是如何轉(zhuǎn)化成簡潔的Lambda表達(dá)式的。這對(duì)程序員來說無疑又是提高生產(chǎn)力的一個(gè)體現(xiàn)!

相關(guān)文章

  • c# Parallel類的使用

    c# Parallel類的使用

    這篇文章主要介紹了c# Parallel類的使用,幫助大家實(shí)現(xiàn)數(shù)據(jù)與任務(wù)的并行,感興趣的朋友可以了解下
    2020-11-11
  • C#中的委托和事件詳解

    C#中的委托和事件詳解

    本文詳細(xì)講解了C#中的委托和事件,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • c# 以二進(jìn)制讀取文本文件

    c# 以二進(jìn)制讀取文本文件

    在當(dāng)前目錄創(chuàng)建一個(gè)文件myfile.txt,對(duì)該文件具有讀寫權(quán)限
    2009-07-07
  • Unity Blend Tree動(dòng)畫混合樹使用入門教程

    Unity Blend Tree動(dòng)畫混合樹使用入門教程

    這篇文章主要為大家詳細(xì)介紹了Unity Blend Tree動(dòng)畫混合樹使用入門教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • asp.net中調(diào)用oracle存儲(chǔ)過程的方法

    asp.net中調(diào)用oracle存儲(chǔ)過程的方法

    存儲(chǔ)過程是在大型數(shù)據(jù)庫系統(tǒng)中,一組為了完成特定功能的SQL 語句集,存儲(chǔ)在數(shù)據(jù)庫中經(jīng)過第一次編譯后再次調(diào)用不需要再次編譯,用戶通過指定存儲(chǔ)過程的名字并給出參數(shù)來執(zhí)行它,下面給大家介紹下asp.net中調(diào)用oracle存儲(chǔ)過程的方法,需要的朋友可以參考下
    2015-08-08
  • C#讀寫INI文件的方法

    C#讀寫INI文件的方法

    這篇文章主要介紹了C#讀寫INI文件的方法,涉及C#讀寫ini文件的相關(guān)實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • C#實(shí)現(xiàn)三元組的使用示例

    C#實(shí)現(xiàn)三元組的使用示例

    本文介紹了C#中的三元組數(shù)據(jù)結(jié)構(gòu),以及如何使用三元組在C#中進(jìn)行一些特定的計(jì)算,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • c#進(jìn)程之間對(duì)象傳遞方法

    c#進(jìn)程之間對(duì)象傳遞方法

    本文主要介紹了c#進(jìn)程之間對(duì)象傳遞的方法。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-04-04
  • C# 語音功能的實(shí)現(xiàn)方法

    C# 語音功能的實(shí)現(xiàn)方法

    最近看了一些資料,是c#實(shí)現(xiàn)語音功能的?,F(xiàn)在就簡單的講一下怎么實(shí)現(xiàn)。
    2013-03-03
  • newtonsoft.json解析天氣數(shù)據(jù)出錯(cuò)解決方法

    newtonsoft.json解析天氣數(shù)據(jù)出錯(cuò)解決方法

    這篇文章主要介紹了NewtonSoft.JSon解析天氣數(shù)據(jù)時(shí)出錯(cuò)的解決方法,需要的朋友可以參考下
    2014-02-02

最新評(píng)論

航空| 乌拉特后旗| 乌审旗| 普格县| 锡林浩特市| 安顺市| 大港区| 嘉峪关市| 连云港市| 都江堰市| 顺平县| 河北省| 仙桃市| 绥德县| 临潭县| 六盘水市| 九龙城区| 大埔县| 峡江县| 常山县| 疏勒县| 黄大仙区| 莱州市| 长岭县| 禄劝| 临夏县| 东平县| 清流县| 利川市| 永德县| 师宗县| 丘北县| 小金县| 潼关县| 陆河县| 修武县| 伊金霍洛旗| 周口市| 康乐县| 西华县| 承德市|