程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 懂得C#中的Lambda表達式

懂得C#中的Lambda表達式

編輯:C#入門知識

懂得C#中的Lambda表達式。本站提示廣大學習愛好者:(懂得C#中的Lambda表達式)文章只能為提供參考,不一定能成為您想要的結果。以下是懂得C#中的Lambda表達式正文


先來看兩段代碼:

 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也一樣,然則意義是分歧的,後者相當於匿名辦法,前者

更像是"匿名"的拜托,其實如許寫:

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

這個跟下面兩種寫法也是一樣的後果,首次接觸的時刻,能夠年夜家跟我一樣會有些渺茫,Lamdba表達式究竟該怎樣用呢?

起首照樣要弄清Lamdba表達式的幾個特征:

1. Lamdba 表達式是一個拜托類型:

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

2. Lamdba 表達式可以用作匿名辦法

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

我們曉得, 當結構一個新的拜托的時刻, 他的結構器須要一個函數指針作參數,這個函數指針是拜托類型的
現實上,當我們如許去new 一個拜托的時刻:

  MethodInvoker invoker = new MethodInvoker(MyFunc);
 
"MyFunc" 就是一個拜托,而不只是一個函數名的存在. 編譯器將為這個結構函數生成一個匿名拜托:

  MethodInvoker invoker = new MethodInvoker(delegate() { MyFunc(); });
 
可以如許懂得編譯器的行動: 匿名辦法其實也就是拜托。

那末為何我們可以這麼寫呢:

  MethodInvoker invoker = () => { Console.WriteLine(); };
 
我們來看一看:
起首,這個拜托的結構器須要一個拜托參數,所以平日我們得如許寫:

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

然則匿名的delegate 可以轉化成函數指針 (void() target):
 所以如許寫是可以的:

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

//別的一方面,因為編譯器對"寬松拜托"的支撐, MethodInvoker類拜托可以轉化成匿名類拜托:

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

從下面,我們可以看到一個龐雜的拜托是若何轉化成簡練的Lambda表達式的。這對法式員來講無疑又是進步臨盆力的一個別現!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved