Lambda是函式的簡寫,顧名思義就是把一串函式用很精簡的方式表達。我想一定有人覺得很奇怪,怎麼會講到Lambda呢?
因為擴充方法加上Func、Action,最後再加上Lambda,就是我們在LINQ中經常看到的.Where、.Sum的寫法啦!
這麼好用的東西當然要給他介紹一下,您說是吧?
首先先來回顧一下Action的寫法
Class1
public class Class1
{
// 撰寫一個函式
// 在呼叫時,外部要傳入一個Action
// Action 即是 無返回值的一個函式
public static void DelegateByAction(Action action)
{
// 外部傳入一個函式,在這邊做執行
// 但是要做什麼事,DelegateByAction本身並不知道
action();
}
}
Main
private static void Hello()
{
Console.WriteLine("Hello World!");
}
static void Main(string[] args)
{
// 把Hello這個無返回值的函式當作參數傳遞
Class1.DelegateByAction(Hello);
}
在這邊我們即將移除Hello這段函式,會改成這樣
class Program
{
//private static void Hello()
//{
// Console.WriteLine("Hello World!");
//}
static void Main(string[] args)
{
// 有沒有發現這邊寫得很奇怪呢?繼續看下去吧!
Class1.DelegateByAction(() => Console.WriteLine("Hello World!"));
}
}
在這邊會寫的這個奇怪,是因為函式的表達方式被簡寫了
()代表著函式中要傳入的參數,因此如果Action有多個參數,則就在()中把參數帶入,應該很合理吧?
若是只傳入一個參數,則可以省略()這個符號
箭頭函式就不用想太多了,純粹就是個表達參數的方式而已
而後方的Console.WriteLine("Hello World!")即是要呈現的程式碼,如果有多行的程式碼,則必須使用大括號包夾{}
在這邊應該可以知道()代表函式中的()符號,至於{}則是代表函式中的{}符號,應該認識到Lambda是怎麼來的了吧!
將傳入的參數,指定給要實做的程式碼,表達的方式就是(參數) => {實做程式碼},想更了解的人可以上網查arrow function!
如果遇到Func的話,則在實做的程式碼中加個return即可
還是看不懂的話可以參考參考這篇
static void Main(string[] args)
{
string hello = "Hello World!";
// Action函式會印出Hello World!
Action action = () => Console.WriteLine(hello);
action();
// 返回一個Hello World!的字串
Func<string> func = () => { return hello; };
var str = func();
}
歡迎您的加入,讓這個社群更加美好!