Lambda表示式和Lambda表示式樹

2021-04-29 03:34:11 字數 2829 閱讀 1923

原版來自:

linq學習筆記之二 —— lambda表示式和lambda表示式樹

lambda

表示式(lambda expressions)是linq實現的另一特性。lambda表示式的作用就是使用使用函式式語法,將方法實現關聯到委託例項。在使用查詢表示式(query expressions)時,查詢表示式也將被語法對映為擴充套件方法(extension methods)和lambda表示式配合使用的形式。

先來說說lambda表示式的「前身」——匿名方法(anonymous methods)。匿名方法是.net framework 2.0中的新特性,意義就在於使用更簡單的語法將方法實現關聯到委託(delegate)例項。例如:

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

// 匿名方法演示

namespace

static

int age

static

void main(string args)

; myothermethod(anonymousmethod);

myothermethod(delegate(string x, int y) );

console.read(); }

static

void myothermethod(mydelegate mydelegate)

| age:", name, age.tostring()));

} } }

結果顯示:

name:set in delegate | age:20

name:set in delegate second | age:20

如果使用lambda表示式實現相同的功能,語法相比匿名方法要簡單一些,如下:

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

// lambda

表示式演示

namespace

static

int age

static

void main(string args)

; myothermethod(anonymousmethod);

myothermethod((x, y) => );

console.read(); }

static

void myothermethod(mydelegate mydelegate)

| age:", name, age.tostring()));

} } }

結果顯示:

name:set in delegate | age:20

name:set in delegate second | age:20

檢視il**,使用lambda表示式與使用匿名方法的il**一致,可以說,lambda表示式最終會編譯成匿名方法的il**,只是語法上的區別罷了。

————————— 華麗的分割線 ——————————

簡單總結: 1.

lambda

表示式的基本形式是:(引數列表)=>表示式或語句塊。 2.

lambda

表示式的特點就是:引數列表可以不指定引數型別,由編譯器進行推斷。但需要注意,在多個引數的情況下,如果不顯示指定引數型別,所有的引數都不應指定引數型別;如果顯示指定引數型別,所有的引數都應顯示指定引數型別。 3.

如果委託有返回型別,可以再語句塊中進行返回。如果委託無引數,lambda表示式的語法為:()=>表示式或語句塊。示例如下:

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

// lambda

表示式演示

namespace ;

// 無引數

int x = 10;

mydelegate2 my2 = () => x = 10;

} } }

————————— 華麗的分割線 ——————————

lambda

表示式樹(lambda expressions tree)簡單介紹:

lambda

表示式樹就是將lambda表示式分解成樹狀結構(還沒有想到具體的用途...)。使用lambda表示式樹,需要引入system.linq.expressions命名空間;如果分解lambda表示式,表示式主體(=>右邊部分)不能是語句塊或等式。示例如下:

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.linq.expressions;

// lambda

表示式樹演示

// 獲得表示式例項後就可以進行分解了

namespace }

}

lambda表示式 lambda表示式

1.概述 c 11 中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或 exception 宣告 返回值型別可以看到,lambda 主要分為五個部分 函式物件引數 操作符過載函式引數 muta...

LINQ和Lambda表示式

前段時間接觸了一種新的表示式,但是不知道這個是什麼意思,所以就先站在巨人的肩膀用了,現在聽師哥說這種寫法是 lambda 表示式。我一直以為,這個 lambda 表示式和 linq 查詢有異曲同工之妙,可惜,這樣想就大錯特錯了。定義語言整合查詢 language integrated query 允...

Lambda表示式表示式樹

在c 3.0中,繼匿名方法之後出現了lambda 表示式,使表達更為簡潔 快捷。lambda 表示式使用lambda 運算子 來定義,語法如下 引數列表 lambda 運算子的左邊是輸入引數,定義lambda表示式的接收引數列表,右邊包含表示式或語句塊,表示將表示式的值或語句塊返回的值傳給左邊的引數...