對C#的=>(Lambda)的理解

陳國仁
3 min readNov 18, 2019

--

感謝Eric大大給一個好理解的範例:

原本常見寫一個方法像這樣:

Bool A ( int a,int b)
{
return a==b;
}

而Lambda的概念是,把上面 改成 輸入 => 黑箱=>輸出

也就是:

A= (a,b)=>(a==b)

(參數)=>{運算式}
把左邊的(參數) 丟到 右邊的{運算式}去做運算

這邊有二點重點:
1.A是什麼並不重要,也就是"匿名方法"的概念
2.把原本需要四行寫成的A方法,精簡改成一行:
輸入【int a,int b 】 => 輸出【a==b】

當然,Lambda 的主體可以包含任意數目的陳述式,但是實際上通常不會超過兩個或三個陳述式,像這樣的例子:

Action<string> greet = name => 
{
string greeting = $”Hello {name}!”;
Console.WriteLine(greeting);
};
greet(“World”);// Output: Hello World!

還有在委派中,可以這樣用:

Func<int, bool> equalsFive = x => x == 5;
bool result = equalsFive(4);
Console.WriteLine(result); // False

委派可以具現化為 Func<int, bool> 執行個體,其中 int 是輸入參數,而 bool 是傳回值傳回值一律在最後一個類型參數中指定。 例如,Func<int, string, bool> 定義具有兩個輸入參數 (intstring) 的委派與 bool 的傳回類型。

委派,用一句話解釋,就是方法中包一個方法,舉例像是:
B(A()),就像數學裡,函數中包一個函數f(g(x)),
這就是我覺得對委派最簡單易懂的形容
白話就像在說,我把部分事情委託派給其他函數幫我做
以前只知道函數內傳入的參數就是int、String...等等,
但其實,傳入的參數也可以是一個函數,一個方法!!

另外,在判斷矩陣時,Lambda可以減少很多迴圈的使用,例如:

 int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; 
var firstNumbersLessThanSix = numbers.TakeWhile(n => n < 6);
Console.WriteLine(string.Join(“ “, firstNumbersLessThanSix)); // Output:
// 5 4 1 3

其他詳細範例可以看下面相關網路文章:
https://jeffprogrammer.wordpress.com/2016/01/02/%E8%A7%80%E5%BF%B5-lambda-expression-func/

看完文章覺得對你有幫助,記得幫我鼓掌1下 👏 ,各位大大的鼓勵,對我是很大的創作動力,感謝*1000!

--

--