成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Lambda簡化C#編程學習心得

開發 后端
用Lambda表達式可以簡化C#編程,用法非常靈活。但是代碼不太容易掌握,下面就跟我一起來學習一下吧。

下邊是我學Lambda表達式的一點記錄。

1、Lambda表達式是與委托緊密聯系的。只要有委托參數類型的地方,就可以使用Lambda表達式。

Lambda表達式的運算符是=>。運算符左邊列舉出了需要的參數,右邊定義了賦予Lambda變量的方法的實現代碼。下面這段代碼是一個最簡單的使用方法

  1. public class MyLambda{    public void disPlay()      
  2. {        string mid = ",middle part,";          
  3. Func<string, string> lambda = param =>              
  4. {                param += mid;                param   
  5. += "and this was added to the string";                  
  6. return param;            };        Console.WriteLine  
  7. (lambda("Start of string"));    }}  

Func<string, string>是一個委托類型。包含兩個參數:一個輸入的string和一個輸出的string.

parm是輸入參數,所以他的類型可以認為是string類型的(當然很多地方會出現沒有名字的類型的)。

運算符=>右邊表示一個方法,這個方法沒有名字。這個方法賦予了變量lambda。

在本例中,通過Console.WriteLine(lambda("Start of string"));向lambda方法傳遞參數“Start of string”.經處理后會有這樣的輸出:

Start of string,middle part,and this was added to the string。

所以我想這樣理解:Lambda表達式表示是一個函數的另一種寫法。運算符=>左邊是輸入,右邊是函數體。函數體需不需要返回值,由接收這個函數定義的lambda表達式的委托決定。

2、Lambda表達式的參數。

lambda表達式如果只有一個參數,只寫出參數名就行了。下邊的lambda表達式使用了參數s,因為委托類型定義了一個string類型。所以s的類型就是string。實現函數體的代碼調用了String.Format()方法返回一個字符串,在調用委托是就直接把字符串輸出了:

 

  1. Func<stringstring> oneParam = s =>    {        return   
  2. String.Format("Change To UpperCase {0}", s.ToUpper  
  3. ());    };  
  4. Console.WriteLine( oneParam("abc"));  

注:Func<string,string>是一個系統定義的帶有一個輸入和一個輸出的委托。

如果委托有多個參數,就要把參數放到括號中,如下:

 

  1. Func<doubledoubledouble> twoParam = (x, y) =>      
  2. {        return x * y;    }; 

 

3、單行代碼和多行代碼

如果Lambda表達式只有一條語句,在方法塊內就不需要花括號和return語句了,編譯器會自動添加一條隱式的return語句。如上邊的兩個表達式可以分別表示為:

 

  1. Func<stringstring> oneParam = s => String.Format  
  2. ("Change To UpperCase {0}", s.ToUpper());Func<double,   
  3. doubledouble> twoParam = (x, y) => x * y;  

 

但是如果Lambda表達式實現代碼需要多條語句時,就必須添加花括號和return語句了。如***個例子的代碼。

4、Lambda表達式的外部變量

Lambda表達式可以使用外部變量。但使用時應該注意些問題:

先看下邊的代碼:

 

  1. int someVar = 5;Func<intint> f = x => x +   
  2. someVar;someVar = 10;Console.WriteLine(f(5)); 

 

輸出應該是x+5還是x+10呢?運行下發現輸出15(x+10).即修改外部變量someVar后,會使用外部變量的新值。

對于表達式x => x + someVar; 編譯器會創建一個匿名類,他有一個構造函數來傳遞外部變量。該構造函數取決于從外部傳遞過來的變量個數。對于上邊這個例子,我們可以認為構造函數接受一個int,匿名類包含了一個匿名方法,其實現代碼和返回類型有lambda表達式定義:

 

  1. public class AnonymousClass{    private int someVar;      
  2. public AnonymousClass(int someVar)    {          
  3. this.someVar = someVar;    }    public int   
  4. AnonymousMethod(int x)    {        return x +   
  5. someVar;    }} 

 

使用Lambda表達式時,調用該方法(AnonymousMethod(int x)),會創建匿名類的一個實例(相當于new AnonymousClass(somevar)),并傳遞調用該方法時的變量的值。

Lambda簡化C#編程學習心得就先寫到這里了,希望對大家有幫助。

【編輯推薦】

  1. 細說針對C#中的Lambda表達式優化
  2. 詳解C#委托、時間和Lambda表達式
  3. Lambda表達式動態函數編程:更加靈活強大
  4. Lambda表達式
  5. 詳解C#基礎之委托異步
  6. C#常用線程同步方法應用場景和實現原理
責任編輯:佚名
相關推薦

2009-08-18 10:59:46

C#枚舉類型

2009-08-13 18:10:31

C#靜態構造函數

2009-09-17 13:38:42

LINQ to XML

2011-04-06 11:08:52

Java異常

2009-06-23 09:05:10

Seam框架JSF

2009-12-22 15:49:50

Linux系統文件鎖

2009-11-06 17:31:03

Oracle密碼文件

2012-06-27 14:04:22

folly

2009-08-26 16:17:23

C# Lambda表達

2009-08-24 11:02:52

C#接口映射

2009-08-24 09:55:26

C#接口轉換

2009-09-14 18:19:49

LINQ模糊查詢

2009-09-01 16:12:41

C#命名指南

2009-08-14 15:54:12

C#編程語言

2009-09-14 13:44:14

Lambda ExprC# Lambda

2009-08-24 10:06:31

C#接口成員

2009-08-25 16:32:24

C#語言

2009-09-10 16:35:06

CCNA考試培訓

2009-07-15 18:11:17

MVC模式學習

2009-08-26 17:22:09

C#語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: h在线看| 欧美乱做爰xxxⅹ久久久 | 亚洲欧美综合精品另类天天更新 | 国产乱码精品1区2区3区 | 开操网| 国产精品一区视频 | 欧美一区二区三区免费电影 | 国产亚洲精品久久久久动 | 日韩电影中文字幕 | 91av亚洲 | 国产精品久久久久aaaa | 国产精品日韩欧美一区二区三区 | 国产精品视频久久久 | 亚洲一级毛片 | 91亚洲精 | 欧美一级黄 | 日韩视频在线免费观看 | 国产色婷婷久久99精品91 | 日本天堂一区二区 | 日韩中出 | 自拍偷拍第一页 | 97国产精品视频人人做人人爱 | 午夜视频在线观看一区二区 | 超碰网址| 亚洲精品国产综合区久久久久久久 | 国产在线观看一区二区 | 亚洲一区中文字幕在线观看 | 日韩欧美在线观看视频网站 | 红色av社区| 嫩草网| 三级成人在线 | 国产精品亚洲成在人线 | 999久久久国产精品 欧美成人h版在线观看 | 亚洲一区二区三区四区五区午夜 | 中国大陆高清aⅴ毛片 | 成人深夜小视频 | 久久国产精品一区 | 欧美日日日日bbbbb视频 | 久久不卡 | 久久久精 | 99在线免费视频 |