日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
C#3.0中Lambda表達(dá)式詳解

在C#2.0中,微軟給我們帶來了一些新的特性,例如泛型,匿名委托等。然而,這些新的特性多多少少會(huì)給人一種從別的語(yǔ)言中“抄”來的感覺(例如泛型類似C++的模板,一些特性類似Java中的一些東西)。但是在C#3.0中,微軟給我?guī)淼囊恍┬绿匦钥赡苁且郧八虚_發(fā)語(yǔ)言都沒有的特性。這無疑大大的體現(xiàn)了C#3.0在開發(fā)語(yǔ)言中強(qiáng)大的優(yōu)勢(shì)。

在華池等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都營(yíng)銷網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè),華池網(wǎng)站建設(shè)費(fèi)用合理。

Lambda表達(dá)式

Lambda 表達(dá)式是一個(gè)匿名函數(shù),它可以包含表達(dá)式和語(yǔ)句,并且可用于創(chuàng)建委托或表達(dá)式目錄樹類型。所有 Lambda 表達(dá)式都使用 Lambda 運(yùn)算符 =>。關(guān)于Lambda更詳細(xì)的講解大家可以參看 MSDN。里面說的很清楚。

這里簡(jiǎn)單舉個(gè)例子來說明Lambda的好處。Lambda在對(duì)匿名委托的處理上提供了更清楚的實(shí)施方式。例如在2.0中。我們可以寫這樣的代碼:

 
 
 
  1. Code
  2. public class Example
  3. {
  4.    public static void Demo(System.Windows.Controls.TextBlock outputBlock)
  5.    {
  6.       Func convert = delegate(string s)
  7.          { return s.ToUpper(); };
  8.       string name = "Dakota";
  9.       outputBlock.Text += convert(name) + "\n";
  10.    }
  11. }

在 C# 中將 Func<(Of <(T, TResult>)>) 委托與匿名方法一起使用。

在3.0中,我們可以使用Lambda來更清楚的進(jìn)行參數(shù)的傳遞:

 
 
 
  1. Code
  2. public class Example
  3. {
  4.    public static void Demo(System.Windows.Controls.TextBlock outputBlock)
  5.    {
  6.       Func convert = s => s.ToUpper();
  7.       string name = "Dakota";
  8.       outputBlock.Text += convert(name) + "\n";
  9.    }
  10. }

Lambda 表達(dá)式的基礎(chǔ)類型是泛型 Func 委托之一。這樣能以參數(shù)形式傳遞 lambda 表達(dá)式,而不用顯式將其分配給委托。尤其是,因?yàn)?System.Linq 命名空間中許多類型方法具有 Func<(Of <(T, TResult>)>) 參數(shù),因此可以給這些方法傳遞 lambda 表達(dá)式,而不用顯式實(shí)例化 Func<(Of <(T, TResult>)>) 委托。這樣可以使我們的代碼更加簡(jiǎn)潔,邏輯上更易于理解。

對(duì)象的初始化

在C#中,對(duì)象的初始化也做了一些改進(jìn)。一個(gè)新的功能就是提供了更方便的語(yǔ)法規(guī)則來聲明變量的值。

假如我們聲明一個(gè)Student對(duì)象:

 
 
 
  1. Code
  2. public class Student
  3. {
  4.     private string _stuName;
  5.     private string _stuAge;
  6.     private int _stuClass;
  7.     public Student() { }
  8.     public string StuName
  9.     {
  10.         get { return _stuName; }
  11.         set { _stuName = value; }
  12.     }
  13.     public string StuAge
  14.     {
  15.         get { return _stuAge; }
  16.         set { _stuAge = value; }
  17.     }
  18.     public int StuClass
  19.     {
  20.         get { return _stuClass; }
  21.         set { _stuClass = value; }
  22.     }
  23. }

在C#2.0中,我們是這樣聲明變量并賦值的:

 
 
 
  1. Student stu = new Student();
  2.         stu.StuName = "Brian";
  3.         stu.StuAge = "21";
  4.         stu.StuClass = "1班";

而在C#3.0中,我們可以這樣初始化對(duì)象:

 
 
 
  1. Student stu2 = new Student 
  2.         {
  3.             StuName = "Brian",
  4.             StuAge = "21",
  5.             StuClass = "1班"
  6.         };

從代碼中不難看出,C#3.0給我們提供了很方便得方式來進(jìn)行對(duì)象的初始化工作。

查詢

這個(gè)想必大家都應(yīng)該有所耳聞,那就是鼎鼎大名的Linq。這是C#3.0中最獨(dú)特好用的新特性之一。Linq改變了我們寫數(shù)據(jù)應(yīng)用程序的方式,先前,開發(fā)人員需要考慮并編寫不用的代碼來處理不同數(shù)據(jù)源中的數(shù)據(jù)(SQL Server ,XML ,Memory....)。LINQ很好的幫我們解決了這個(gè)煩人的問題。同時(shí)借助Lambda,我們可以更方便準(zhǔn)確的查詢我們想要的數(shù)據(jù)。

使用Linq簡(jiǎn)單的數(shù)據(jù)查詢例子:

 
 
 
  1. Code
  2. private void BindGridView(string criteria)
  3.     {
  4.         string strConn = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
  5.         NorthwindDb db = new NorthwindDb(strConn);
  6.         IEnumerable results;
  7.         if (criteria == string.Empty)
  8.         {
  9.             results=db.Employee.ToArray();
  10.         }
  11.         else
  12.         {
  13.             results = (from c in db.Employee
  14.                           where c.FirstName.Contains(criteria)
  15.                           select c).ToArray();
  16.             
  17.         }
  18.         GridView1.DataSource = results;
  19.         GridView1.DataBind();
  20.     }

變量聲明

這里要說的是var。var是C#3.0中提供的用于聲明變量的關(guān)鍵字,開發(fā)人員可以不考慮變量的類型就可以對(duì)變量進(jìn)行聲明(這一點(diǎn)用法非常類似Javascript)。但是兩者還是有些差異。

相同點(diǎn):用var來聲明任何類型的局部變量。

不同點(diǎn):它僅僅負(fù)責(zé)告訴編譯器,該變量需要根據(jù)初始化表達(dá)式來推斷變量的類型,而且只能是局部變量。

我們可以這樣聲明變量:

 
 
 
  1. var i= 10; 
  2. var name = "edisundong"; 
  3. var numbers = new int[] { 1, 2, 3 }; 

var僅僅是個(gè)關(guān)鍵字,它并不是C#3.0中的一種新的類型,而是負(fù)責(zé)告訴編譯器,該變量需要根據(jù)初始化表達(dá)式來推斷變量的類型,上面的語(yǔ)句相當(dāng)于

 
 
 
  1. int i= 10; 
  2. string name = " edisundong "; 
  3. int[] numbers = new int[] { 1, 2, 3 }; 

這里還需要注意幾點(diǎn):

1.在聲明時(shí)必須同時(shí)賦值。

2.在使用var聲明一個(gè)局部變量后,他仍然具備強(qiáng)類型。

 
 
 
  1. var integer = 10; 
  2. integer = " edisundong "; 

編譯時(shí)會(huì)報(bào)Cannot implicitly convert type string to int錯(cuò)誤。

3. 初始化器表達(dá)式的編譯期類型不能夠是空(null)類型。

4. var的聲明僅限于局部變量

擴(kuò)展方法

以前如果我們想擴(kuò)展一個(gè)類的功能必須直接源自于它并且從學(xué)其中的方法,在C#3.0中,介紹了一種很快捷的擴(kuò)展功能的方法。

 
 
 
  1. Code
  2. public static class StudentExtensionMethods
  3.     {
  4.         public StudentExtensionMethods()
  5.         {
  6.             //
  7.             //TODO: 在此處添加構(gòu)造函數(shù)邏輯
  8.             //
  9.         }
  10.         public static string GetStudentInformation(this Student stu)
  11.         {
  12.             return string.Format("Name: {0} {1} Age: {2}", stu.StuName,
  13.             stu.StuAge, stu.StuClass);
  14.         }
  15.     }

定義一個(gè)類,其中定義一個(gè)方法,注意:這個(gè)類和方法都是static的,并且方法的參數(shù)是類Student。這樣,Student類就可以擴(kuò)展GetStudentInformation方法:

 
 
 
  1. Code
  2. Student stu2 = new Student
  3.             {
  4.                 StuName = "Brian",
  5.                 StuAge = "12",
  6.                 StuClass = "1班"
  7.             };
  8.             Console.WriteLine(stu2.GetPersonInformation());

小結(jié):初學(xué)了下C#3.0,感覺帶來了不少驚喜,其中有很多新的特性是以前所未知的。C#3.0的新特性應(yīng)該還不止這些,還需繼續(xù)學(xué)習(xí)研究。


文章標(biāo)題:C#3.0中Lambda表達(dá)式詳解
URL鏈接:http://m.5511xx.com/article/cdcojjd.html