国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 17:09:58
字體:
來源:轉載
供稿:網友

拉姆達表達式(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)
通過這種技術,我們對于數據和數據表達式的操作可以變得更加輕松,不用動不動就是寫方法了。

http://zc1984.VEVb.com/archive/2006/06/10/422679.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南溪县| 杂多县| 罗山县| 永平县| 丰宁| 东海县| 永兴县| 阿克陶县| 滦平县| 保康县| 甘德县| 屏东县| 上饶县| 西林县| 察雅县| 特克斯县| 武宁县| 达拉特旗| 兰溪市| 郯城县| 兴仁县| 西藏| 通海县| 江门市| 大兴区| 开江县| 平邑县| 潮安县| 南投市| 呼玛县| 永安市| 荥经县| 万源市| 大方县| 高陵县| 泸西县| 乌兰浩特市| 大埔区| 巴南区| 广东省| 姚安县|