2010-04-16 74 views
14
  1. 任何人都可以解釋什麼是LINQ,Lambda,匿名方法,代表是什麼意思?LINQ vs Lambda vs匿名方法vs代表

  2. 這3個如何彼此不同?

  3. 一個可以替換另一個嗎?

我沒有得到任何具體的答案,當我做谷歌搜索

+4

該列表中有4件東西... – 2010-04-16 10:49:00

+3

<敵對反應> – TheHurt 2010-04-16 10:57:49

+0

@Sri Kumar:我沒有投下票,但我想這是一個混合的事實,這是現成的信息和你的英語並不完美。 – 2010-04-16 16:53:21

回答

29

LINQ是一個廣泛的技術名稱,涵蓋了大量的.NET 3.5和C#3.0更改; 「用語言進行查詢」以及更多。

委託與函數指針相當;一「的方法處理」作爲一個對象,如果你喜歡,即

Func<int,int,int> add = (a,b) => a+b; 

書面委託,我就可以調用的方式。代表們還支持事件和其他回調方法。

匿名方法是創建委託實例,例如2.0速記:

someObj.SomeEvent += delegate { 
    DoSomething(); 
}; 

他們還通過「捕獲變量」(以上未圖示)引入全面關閉到語言。 C#3.0引入lambda表達式,其可以產生相同匿名方法:

someObj.SomeEvent += (s,a) => DoSomething(); 

但可以被編譯成表達式樹針對(例如)數據庫完全LINQ。例如,您不能針對SQL Server運行委託!但:

IQueryable<MyData> source = ... 
var filtered = source.Where(row => row.Name == "fred"); 

可以被翻譯成SQL,因爲它被編譯成一個表達式樹(System.Linq.Expression)。

所以:

  • 可以使用匿名方法來創建一個委託
  • 拉姆達可能是同一個匿名-方法,但不一定是
1

雖然該鏈接的標題是Anonymous methods它涵蓋了代表,匿名方法和lambda表達式。