iT邦幫忙

2022 iThome 鐵人賽

DAY 13
0
自我挑戰組

C# 和 SQL 探索之路系列 第 13

Day 13: C# Lambda 語法介紹

  • 分享至 

  • xImage
  •  

大家好,今天是第 13 天 …
LINQ 常常會搭配 Lambda 語法使用,因此在今天進行簡單的介紹。

什麼是 Lambda 語法

可用來建立匿名函式。透過委派的方式傳入需要的資料。以下是一個基本的語法,從中取得集合 emp 裡國家為台灣的資料,並以匿名型別呈現:

var q = emp.Where(x => x.country.Equals("taiwan"));

其實效果相當於以下的匿名函式:

var anonymous = emp.Where(delegate (Employee x) {return x.country.Equals("taiwan"); });

相比兩段語法,會發現 Lambda 語法在傳遞參數時,不一定需要明確的指定參數型別。

進一步的 Lambda 語法說明

  • 如果需要傳入多個參數時,必須加上括號 (只有一個參數時,括號可以省略)。
int a = 3, b = 5;
Func<int, int, int> rect = (x, y) => x * y; // Func<T, T, TResult> 委派
Console.WriteLine(rect(a, b));
  • 如果需要指定明確型別時 (例如編譯器無法判斷輸入參數的類型),也要使用括弧。
Func<int, string, bool> isEqualLength = (int x, string s) => s.Length == x;
Console.WriteLine(isEqualLength(3, "super"));
  • 只有單行時不必用 {} 包住程式,稱為 Lambda Expression;有多行時需用 {} 包住,稱為 Lambda Statements。

範例程式碼

using System;
using System.Linq;
                    
public class Program
{
    // 員工類別
    public class employee{
        public string name;
        public string country;
        
        public employee(string n, string c){
            this.name = n;
            this.country = c;
        }
    }
    
    public static void Main()
    {
        // 建立測試資料
        employee[] emp = new employee[3];
        emp[0] = new employee("jacky", "taiwan");
        emp[1] = new employee("annie", "america");
        emp[2] = new employee("jeff", "taiwan");

        // 使用 Lambda 語法查詢國家中等於 taiwan 的資料
        var q = emp.Where(x=>x.country.Equals("taiwan"));
        
        foreach(var t in q.AsEnumerable()){
            Console.WriteLine(t.name + ": " + t.country);
        }
}

範例程式碼

參考資料


上一篇
Day 12: C# 用 LINQ 操作 DataTable
下一篇
Day 14: C# 多工處理: Thread
系列文
C# 和 SQL 探索之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言