通過前面對委託的講解之後,應該明白了委託的用處和委託的好處,但是在使用委託的時候必須要知道方法的名字才能使用委託,接下來需要了解的是即使不知道方法名也能使用委託即匿名方法 接下來將用乙個例項來說明匿名方法
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace anonymousdelegate
; console.writeline(str_full("字串0,"));}}
}
程式執行的結果
從**中我們可以看出並沒有將方法傳遞給func而是使用了delegate關鍵字加上乙個字串引數,這裡就是使用了匿名方法
掌握了匿名方法之後就可以使用lambda來改寫這個匿名方法了
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace anonymousdelegate
; "字串0,"));
string str1 = "字串1,";
funcstr_full = str0 =>
;console.writeline(str_full("字串0,"));}}
}
將上面的匿名方法注釋掉我們使用lambda表示式來改寫這個程式,得到的結果和上圖的結果一樣這裡就不重複貼圖了。
首先要明白的就是「=>」運算子改運算子叫做lambda運算子 運算子的左邊列出了需要的引數"=>" 右邊定義了賦予lambda變數的方法的實現**
關於lambda表示式引數的問題,顯然上面的方法只用到了乙個引數當多個引數的時候該怎麼處理
其實很簡單 funcnparm = (1,2,3,...,n-1) =>
比如乙個引數funconeparm = s =>
兩個引數functwoparm = (x,y) =>
三個引數functhreeparm = (x,y,z) =>
下面直接看乙個例項:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace lambda
; console.writeline("number1+number2+pram的結果是:", res(3));
//當lambda表示式只有一行語句的時候可以省略return語句 其中隱式包含了return
int xy = 5;
funcf = x => xy + x;
console.writeline(f(3));
funcresul = (x, y) => x += y;//兩個引數的lambda表示式
console.writeline("x+y的結果是:", resul(1, 2));
//但是花括號中包含了多條語句的時候就需要return語句了(此時的return語句不可被省略)
funcresu = (x, y) =>//兩個in引數 乙個out結果
;console.writeline("x+y的結果是:", resu(1, 2));}}
}
程式執行的結果如下圖:
例項正在補充中...敬請期待 歡迎拍磚
C 高階程式設計(八) Lambda表示式
lambda 表示式 是乙個匿名函式,它可以包含表示式和語句,並且可用於建立委託或表示式樹型別。所有 lambda 表示式都使用 lambda 運算子 該運算子讀為 goes to 該 lambda 運算子的左邊是輸入引數 如果有 右邊包含表示式或語句塊。lambda表示式的基本形式是 explic...
高階函式 lambda表示式
2.6 map 第乙個引數傳入乙個函式,第二個引數為乙個可迭代物件 li 1 1,3,5,7 def funca x return x x m1 map funca,li 1 print type m1 print m1 2.6 reduce 第乙個引數傳入乙個函式,第二個引數 可以迭代物件 第三個...
Lambda 表示式(C 程式設計指南)
最近在研究arcgis runtime,被下面 中的這個符號搞暈了 總感覺這是乙個函式,去微軟的 查了查,果不其然,這個也算乙個新的東西吧,學習了,感謝群友的幫忙。localserver.initializeasync graphicslayer mymap.layers graphicslayer...