Lambda表示式學習記錄

2021-09-27 10:08:07 字數 2087 閱讀 3246

lambda表示式可以簡化c#程式設計的某些方面,用法非常靈活。因此也不容易掌握。

下邊是我學lambda表示式的一點記錄。

1、lambda表示式是與委託緊密聯絡的。只要有委託引數型別的地方,就可以使用lambda表示式。

lambda表示式的運算子是=>。運算子左邊列舉出了需要的引數,右邊定義了賦予lambda變數的方法的實現**。下面這段**是乙個最簡單的使用方法:

public class mylambda

;console.writeline(lambda("start of string"));

}}

func是乙個委託型別。包含兩個引數:乙個輸入的string和乙個輸出的string.

parm是輸入引數,所以他的型別可以認為是string型別的(當然很多地方會出現沒有名字的型別的)。

運算子=>右邊表示乙個方法,這個方法沒有名字。這個方法賦予了變數lambda。

在本例中,通過console.writeline(lambda("start of string"));向lambda方法傳遞引數「start of string」.經處理後會有這樣的輸出:

start of string,middle part,and this was added to the string。

所以我想這樣理解:lambda表示式表示是乙個函式的另一種寫法。運算子=>左邊是輸入,右邊是函式體。函式體需不需要返回值,由接收這個函式定義的lambda表示式的委託決定。

2、lambda表示式的引數。

lambda表示式如果只有乙個引數,只寫出引數名就行了。下邊的lambda表示式使用了引數s,因為委託型別定義了乙個string型別。所以s的型別就是string。實現函式體的**呼叫了string.format()方法返回乙個字串,在呼叫委託是就直接把字串輸出了:

funconeparam = s =>

", s.toupper());

};

console.writeline( oneparam("abc"));
.func是乙個系統定義的帶有乙個輸入和乙個輸出的委託。

如果委託有多個引數,就要把引數放到括號中,如下:

functwoparam = (x, y) =>

;

3、單行**和多行**

如果lambda表示式只有一條語句,在方法塊內就不需要花括號和return語句了,編譯器會自動新增一條隱式的return語句。如上邊的兩個表示式可以分別表示為:

funconeparam = s => string.format("change to uppercase ", s.toupper());

functwoparam = (x, y) => x * y;

但是如果lambda表示式實現**需要多條語句時,就必須新增花括號和return語句了。如第乙個例子的**。

4、lambda表示式的外部變數

lambda表示式可以使用外部變數。但使用時應該注意些問題:

先看下邊的**:

int somevar = 5;

funcf = x => x + somevar;

somevar = 10;

console.writeline(f(5));

輸出應該是x+5還是x+10呢?執行下發現輸出15(x+10).即修改外部變數somevar後,會使用外部變數的新值。

對於表示式x => x + somevar; 編譯器會建立乙個匿名類,他有乙個建構函式來傳遞外部變數。該建構函式取決於從外部傳遞過來的變數個數。對於上邊這個例子,我們可以認為建構函式接受乙個int,匿名類包含了乙個匿名方法,其實現**和返回型別有lambda表示式定義:

public class anonymousclass

public int anonymousmethod(int x)

}

使用lambda表示式時,呼叫該方法(anonymousmethod(int x)),會建立匿名類的乙個例項(相當於new anonymousclass(somevar)),並傳遞呼叫該方法時的變數的值。

**

lambda表示式 lambda表示式

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

lambda表示式學習

lambda表示式的基本形式,如下 capture list params list key word mutuble return type說明 1 capture list 裡面的內容具體形式如下 2 params list 輸入引數,這個和普通的函式一樣 3 keyword mutuble 預...

Lambda表示式學習

看完肯定會有幫助 理解functional inte ce 函式式介面 是學習lambda表示式的關鍵 函式式介面的定義 任何介面,如果只包含唯一乙個抽象方法,那麼它就是乙個函式式介面。對於函式式介面,可以通過lambda表示式來建立該介面的物件 演化過程 一般我們定義介面 例項化介面方法,程式呼叫...