首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 3.0 Lambda 表達式入門:從匿名方法到 Lambda 的語法演進

     編輯:關於C語言

背景:C# 2.0 匿名方法

按鈕點擊事件綁定演進:


// C# 1.x:顯式方法
addButton.Click += new EventHandler(AddClick);
void AddClick(object s, EventArgs e) { listBox.Items.Add(textBox.Text); }

// C# 2.0:匿名方法
addButton.Click += delegate { listBox.Items.Add(textBox.Text); };

C# 3.0 Lambda 表達式:更簡潔


// C# 3.0:Lambda
addButton.Click += (s, e) => listBox.Items.Add(textBox.Text);
// => 讀作 "goes to",左參數右表達式/語句塊

Lambda 參數類型:顯式 vs 隱式


// 顯式類型
(int x) => x + 1

// 隱式類型(推薦,編譯器推斷)
(x, y) => x * y
// 單參數可省略括號
x => x * 2

完整對比案例:篩選偶數長度字符串

匿名方法版


static void AnonMethod(List list)
{
    var even = list.FindAll(delegate(string s) { return s.Length % 2 == 0; });
    foreach (var s in even) Console.WriteLine(s);
}

Lambda 版


static void LambdaExample(List list)
{
    var even = list.FindAll(s => s.Length % 2 == 0);
    foreach (var s in even) Console.WriteLine(s);
}

完整可運行程序結構


namespace LambdaExample
{
    public delegate bool KeyValueFilter(K key, V value);
    
    static class Program
    {
        static void Main()
        {
            var list = new List { "AA", "ABC", "DEFG", "XYZ" };
            AnonMethod(list);
            LambdaExample(list);
            
            // 多參數 Lambda 實戰
            var clothes = new Dictionary 
            { {"Jeans",20}, {"Shirts",15}, {"Pajamas",9}, {"Shoes",9} };
            var shortage = clothes.FilterBy((name, count) => name == "Shoes" && count < 10);
        }
        
        static void AnonMethod(List list) { ... }
        static void LambdaExample(List list) { ... }
    }
    
    public static class Extensions
    {
        public static Dictionary FilterBy(
            this Dictionary items, KeyValueFilter filter) { ... }
    }
}

核心優勢總結

  • 語法極簡:去除 delegate、return、大括號、類型聲明
  • 類型推斷:參數類型由委托目標類型反推
  • 閉包支持:自動捕獲外部變量,生成顯示類
  • 表達式樹雙重性:賦值給 Expression<TDelegate> 時生成表達式樹,支撐 LINQ to SQL/EF

總結

Lambda 表達式是 C# 邁向函數式編程的關鍵語法糖:以極簡語法表達行為,編譯器負責生成委托/表達式樹。從匿名方法到 Lambda,不僅是語法簡化,更是將「代碼作為數據」的理念推向主流,直接支撐了 LINQ 的誕生。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved