程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# 3.0新特性初步研究 Part3:使用拉姆達表達式

C# 3.0新特性初步研究 Part3:使用拉姆達表達式

編輯:關於C語言

拉姆達表達式(Lambda Expression)
可以算是一種匿名方法的實現吧。

在C# 2.0中引入了匿名方法的概念,我們可以寫下如下代碼:
 1class Program
 2{
 3static void TestLambdaExpression()
 4{
 5     List<int> list = new List<int>();
 6   
 7    list.Add(1);
 8    list.Add(2);
 9    list.Add(3);
10    list.Add(4);
11
12    List<int> evenNumbers = list.FindAll(delegate(int i) { return (i % 2) == 0; } );
13
14    foreach (int evenNumber in evenNumbers)
15    {
16        Console.WriteLine(evenNumber);
17    }
18}
19}
20
21static void Main(string[] args)
22{
23TestLambdaExpression();
24}
25
 匿名方法避免了一些“極小函數”的出現,適當使用可以提高代碼的可閱讀性,顯得清爽一點。
(List的FindAll方法需要一個Delegate參數,所以我們可以這樣謝哈)

在C# 3.0中,我們可以這樣寫:


 1static void TestLambdaExpression()
 2{
 3var list = new List<int>();
 4   
 5    list.Add(1);
 6    list.Add(2);
 7    list.Add(3);
 8    list.Add(4);
 9
10var evenNumbers = list.FindAll(i => (i % 2) == 0);
11
12foreach (int evenNumber in evenNumbers)
13{
14        Console.WriteLine(evenNumber);
15    }
16}
其中i=>(i%2)==0就是我們說的Lambda Expression,在這裡它就起到了原來匿名方法的作用,同時提升了代碼的可閱讀性。
下面是一個復雜一點的Lambda Expression的例子:
1fruit.FilterBy((string name, double price) => name == "banana" && price < 2.00);
看了這個例子應該可以自己動手寫一些東西了吧(下樓買瓶可樂去也)

這裡還有一個有趣的東西:Lambda Expression Tree(拉姆達表達式樹)
這是一種用來在運行時把表達式作為數據的技術,我們可在運行時靈活的控制和改變表達式,
增強程序的靈活性!
還是看代碼吧,這樣直接一點:
 1using System.Expressions;
 2
 3static void Main(string[] args)
 4{
 5     Expression<Func<int, bool>> filter = n => (n * 3) < 5;
 6
 7     BinaryExpression lt = (BinaryExpression) filter.Body;
 8     BinaryExpression mult = (BinaryExpression) lt.Left;           
 9     ParameterExpression en = (ParameterExpression) mult.Left;           
10     ConstantExpression three = (ConstantExpression) mult.Right;
11     ConstantExpression five = (ConstantExpression) lt.Right;
12                       
13     Console.WriteLine("({0} ({1} {2} {3}) {4})", lt.NodeType,
14              mult.NodeType, en.Name, three.Value, five.Value);
15}
輸出:
(LT (Multiply n 3) 5)
通過這種技術,我們對於數據和數據表達式的操作可以變得更加輕松,不用動不動就是寫方法了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved