程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# 3.0特性之Lambda表達式(2)

C# 3.0特性之Lambda表達式(2)

編輯:關於C語言

使用Lambda表達式

Lambda表達式的一般形式,是由一組由逗號分隔的參數列表,跟著一個lambda操作符,再跟著一個表達式或者語句塊。多個輸入參數的情況下需要用括號來包圍。在C#中,lambda操作符是=>,因此,在C#中的lambda表達式應該是這個樣子的:

(param1, param2, …paramN) =>
{
statement1;
statement2;

statementN;
return(lambda_expression_return_type);
}

再回過頭看delegate的部分,一個delegate實際上就是指定了輸入的參數格式以及返回值的格式,那麼在lambda表達式中,就對應著=>左邊的那一坨以及語句體裡return的那個東東。在前面的例子中,輸入是一個int型數據,返回一個bool量,比如:

x=>x.Length>0

這個表達式可以讀作“x goes to x.Length >0”,或者“輸入x,返回x.Length>0”。下面的lambda表達式可以返回輸入參數的長度:

s=>s.Length

那麼delegate就應該指定返回int型值。對於多個輸入變量的,比如:

(x,y) => x==y

再復雜一點的:

(x, y) =>
{
if (x > y)
return (x);
else
return (y);
}

好,下面我們來改造前面的那個例子,算法設計者所設計的lambda表達式必須滿足委托的聲明: 

delegate bool IntFilter(int i);

則可以將oddNums的賦值寫成這樣:

int[] oddNums = Common.FilterArrayOfInt(nums, i => ((i & 1) == 1));

結果當然也會和前面完全一樣。

小結

這篇文章僅僅是對lambda表達式的用法做一個簡單的概要描述。對於那種經常需要復用的算法段,使用named method是最正統也是最合理的,匿名方法以及lambda表達式更加適合於那種一次性算法。說到這裡大家應該很明白這東西的使用范疇了,對,那就是linq!在linq的查詢操作中,幾乎所有的算法都是不怎麼復用的,如果為每個查詢都寫一個命名方法,其效率實在慘不忍睹,而lambda表達式正是為此應運而生的。又或者說,幾乎所有的.Net 3.5新語言特性都是為了linq服務的

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