1. 程式人生 > >c#匿名類與匿名函式、lambda表示式

c#匿名類與匿名函式、lambda表示式

  1. 匿名類(隱式型別)
    關鍵字:var
    在linq查詢獲取結果時經常會用到,例如:
var result = from a in b 
                where b.id = 1 
                    select new { a.name , a.age };

也可自定義

var v = new { name = "david" , age = 27 };
var v_words = { "audi" , "benz" , "bmw" };

從 Visual C# 3.0 開始,在方法範圍內宣告的變數可以具有隱式“型別”var。隱式型別本地變數為強型別,就像使用者已經自行宣告該型別,但編譯器決定型別一樣。
var 關鍵字指示編譯器通過初始化語句右側的表示式推斷變數的型別。 推斷型別可以是內建型別、匿名型別、使用者定義型別或 .NET Framework 類庫中定義的型別。

匿名方法(Anonymous methods) 提供了一種傳遞程式碼塊作為委託引數的技術。匿名方法是沒有名稱只有主體的方法

匿名函式是通過使用 delegate 關鍵字建立委託例項來宣告的。例如:

delegate void NumberChanger(int n);
...
NumberChanger nc = delegate(int x)
{
    Console.WriteLine("Anonymous Method: {0}", x);
};

程式碼塊 Console.WriteLine(“Anonymous Method: {0}”, x); 是匿名方法的主體。
委託可以通過匿名方法呼叫,也可以通過命名方法呼叫,即,通過向委託物件傳遞方法引數。

來源:C# 匿名方法
參考:C#程式設計指南-匿名函式
3. lambda表示式
lambda表示式是一個匿名函式,是一種高效的類似於函數語言程式設計的表示式,Lambda簡化了開發中需要編寫的程式碼量,是LINQ的基礎。
lambda表示式格式:(引數列表)=>表示式或語句塊 ,舉例如下:

//無參
() => DoSomeThing() ;

//單引數
p => p.id > 0 ; //返回Bool

//多引數
( x , y ) => x * y ;

//帶型別輸入引數
( int x , int y ) => x * y;