Lambda表示式詳細總結

2022-09-18 00:09:07 字數 4239 閱讀 3639

lambda簡介

lambda運算子:所有的lambda表示式都是用新的lambda運算子 " => ",可以叫他,「轉到」或者 「成為」。運算子將表示式分為兩部分,左邊指定輸入引數,右邊是lambda的主體。

lambda表示式:

1.乙個引數:param=>expr

2.多個引數:(param-list)=>expr

(一)輸入引數

在lambda表示式中,輸入引數是lambda運算子的左邊部分。它包含引數的數量可以為0、1或者多個。只有當輸入引數為1時,lambda表示式左邊的一對小括弧才可以省略。

輸入引數的數量大於或者等於2時,lambda表示式左邊的一對小括弧中的多個引數質檢使用逗號(,)分割。

示例1下面建立乙個lambda表示式,它的輸入引數的數量為0.該表示式將顯示「this is a lambda expression」字串。

[csharp] view plaincopyprint?

()=>"thisisalambdaexpression.");

()=>"this is a lambda expression.");

分析2由於上述lambda表示式的輸入引數的數量為0,因此,該lambda表示式的左邊部分的一對小括弧不能被省略。

示例2下面建立乙個lambda表示式,它的輸入引數包含乙個引數:m。該表示式將計算m引數與2的乘積。

[csharp] view plaincopyprint?

m=>m*2;

m=>m*2;

分析2上述lambda表示式的輸入引數省略了一對小括弧,它與「(m)=>m*2」lambda表示式是等效的。

示例3下面建立乙個lambda表示式,它的輸入引數包含兩個引數:m和n。該表示式將計算m和n引數的乘積。

[csharp] view plaincopyprint?

(m,n)=>m*n;

(m,n)=>m*n;

(二)表示式或語句塊

多個lambda表示式可以構成lambda語句塊。語句塊可以放到運算子的右邊,作為lambda的主體。根據主題不同,lambda表示式可以分為表示式lambda和語句lambda。

語句塊中可以包含多條語句,並且可以包含迴圈、方法呼叫和if語句等。

示例1下面建立乙個lambda表示式,它的右邊部分是乙個表示式。該表示式計算m引數的平方值。

[csharp] view plaincopyprint?

m=>m*n;

m=>m*n;

分析1如果lambda表示式的右邊部分是乙個語句塊,那麼該語句塊必須被""包圍。

示例2下面建立乙個lambda表示式,它的輸入引數包括兩個引數:m和n。該表示式的右邊包含2個表示式;第乙個表示式計算m和n引數的乘積,結果儲存為result變數;第二個表示式顯示result變數的值。

[csharp] view plaincopyprint?

(m,n)=>"包圍。

(三)查詢表示式

查詢表示式是一種使用查詢語法表示的表示式,它用於查詢和轉換來自任意支援linq的資料來源中的資料。查詢表示式使用許多常見的c#語言構造,易讀簡潔,容易掌握。它由一組類似於sql或xquery的宣告性語法編寫的子句組成。

每乙個子句可以包含乙個或多個c#表示式。這些c#表示式本身也可能是查詢表示式或包含查詢表示式。

●查詢表示式必須以from子句開頭,以select或group子句結束。第乙個from子句和最後乙個select子句或group子句之間,可以包含乙個活多個where子句、let子句、join子句、orderby子句和group子句,甚至還可以是from子句。它包括8個基本子句,具體說明如下所示。

●from子句:指定查詢操作的資料來源和範圍變數。

●select子句:指定查詢結果的型別和表現形式。

●where子句:指定篩選元素的邏輯條件。

●let子句:引入用來臨時儲存查詢表示式中的字表示式結果的範圍變數。

●orderby子句:對查詢結果進行排序操作,包括公升序和降序。

●group子句:對查詢結果進行分組。

●into子句:提供乙個臨時識別符號。join子句、group子句或select子句可以通過該識別符號引用查詢操作中的中堅結果。

●join子句:連線多個用於查詢操作的資料來源。

示例1下面建立乙個查詢表示式query,該查詢表示式查詢arr陣列中的每乙個元素。

intarr =new int;

分析1[csharp] view plaincopyprint?

varquery1=fromninarr

selectn;

var query1=from n in arr

select n;

示例2下面建立乙個查詢表示式query2.該查詢表示式查詢arr陣列中大於6的元素。

[csharp] view plaincopyprint?

intarr=newint;

varquery2=fromninarr

wheren>6

selectn;

int arr =new int;

var query2=from n in arr

where n >6

select n;

分析2變數只是儲存查詢操作,而不是查詢的結果。當查詢表示式執行查詢操作時,才會計算該查詢表示式的結果。以上兩個變數的型別都屬於集合型別。

(四)from子句

from子句用來指定查詢表示式的資料來源和範圍變數。它是查詢表示式的必有部分,並且它出現在最開始。資料來源不但可以包括查詢本身的資料來源,而且還可以包括子查詢的資料來源。

範圍變數用來表示資料來源序列中的每乙個元素。

注意:from子句指定的資料來源的型別必須為ienumerable,ienumerable或一種派生型別。

示例1下面建立乙個查詢表示式query。該查詢表示式查詢arr陣列中的每乙個元素。在query查詢表示式中,arr陣列為資料來源,n為範圍變數。

n範圍變數的型別arr資料來源的元素型別。

分析1[csharp] view plaincopyprint?

intarr=newint;

varquery=fromninarr

selectn;

int arr =new int ;

var query =from n in arr

select n;

下面我們來學習資料來源和包含不同的from子句查詢表示式。

資料來源:指定資料的**,它的形式可以為靜態陣列、動態陣列(arraylist)、集合、資料集(dataset)、資料表、mml片段、mml檔案等。

如果資料來源實現了ienumerable介面,那麼編譯器可以推斷範圍變數的型別為其元素型別。例如:資料來源的型別為ienumerable,那麼可以推斷出範圍變數的型別為useinfo。

示例2下面建立乙個查詢表示式query。該查詢表示式查詢list反省陣列中的每乙個元素。在query查詢表示式中,list反省陣列為資料來源。

u為範圍變數。u範圍變數的型別為list資料來源的元素型別(userinfo)。

分析2[csharp] view plaincopyprint?

listlist=...

varquery=fromuinlist

selectu;

list list=...

var query =from u in list

select u;

如果當資料來源是非泛型ienumerable型別(如arraylist等)時,需要顯示指定範圍變數的型別。

示例3下面建立乙個查詢表示式query。該查詢表示式查詢list陣列中的每乙個元素。在query查詢表示式中,list陣列為資料來源,u為範圍變數。

u範圍變數的型別被指定為list資料來源的元素型別(userinfo)。

分析3[csharp] view plaincopyprint?

arraylistlist=newarraylist();

...varquery=fromuserinfouinlist

selectu;

arraylist list =new arraylist();

...var query =from userinfo u in list

select u;

包含單個from子句的查詢表示式

在查詢表示式中,from子句至少有乙個。當from子句只有乙個時,構成的查詢表示式被稱為包含單個from子句的查詢表示式。一般的,包含單個from子句的查詢表示式只包含乙個資料來源。

示例4下面建立乙個查詢表示式query。該查詢表示式查詢arr陣列中的每乙個元素,它就是乙個包含單個from子句的查詢表示式。

正規表示式詳細

正規表示式是一種文字模式,包括普通字元 例如,a 到 z 之間的字母 和特殊字元 稱為 元字元 模式描述在搜尋文字時要匹配的乙個或多個字串。下面是正規表示式的一些示例 表示式匹配 s 匹配空行。d d 驗證由兩位數字 乙個連字元再加 5 位數字組成的 id 號。s s s s s s 1 s 匹配 ...

表示式求值

課程設計報告 課程名稱資料結構 課題名稱表示式求值 專業電腦科學與技術 班級0901 學號 200903010102 姓名覃宇星 指導教師李珍輝鄧作傑郭芳 2011年7月7日 湖南工程學院 課程設計任務書 課程名稱 c語言程式設計 課題表示式求值 專業班級計算機0901 學生姓名 學號指導老師周鐵山...

正規表示式

c 正規表示式經典分類整理集合手冊 作者 發布日期 2009 03 27 有一段時間,正規表示式學習很火熱很潮流,當時在csdn一天就能看到好幾個正規表示式的帖子,那段時間借助論壇以及wrox press出版的 c 字串和正規表示式參考手冊 學習了一些基礎的知識,同時也為我在csdn大概賺了1000...