最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#3.0中Lambda表達(dá)式詳解

 更新時(shí)間:2013年09月22日 11:28:17   投稿:mdxy-dxy  
在C#3.0中,微軟給我?guī)淼囊恍┬绿匦钥赡苁且郧八虚_發(fā)語(yǔ)言都沒有的特性。這無(wú)疑大大的體現(xiàn)了C#3.0在開發(fā)語(yǔ)言中強(qiáng)大的優(yōu)勢(shì)

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

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中。我們可以寫這樣的代碼:

publicclassExample 
{ 
publicstaticvoidDemo(System.Windows.Controls.TextBlockoutputBlock) 
{ 
Funcconvert=delegate(strings) 
{returns.ToUpper();}; 

stringname="Dakota"; 
outputBlock.Text+=convert(name)+"n"; 
} 
}

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

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

publicclassExample 
{ 
publicstaticvoidDemo(System.Windows.Controls.TextBlockoutputBlock) 
{ 
Funcconvert=s=>s.ToUpper(); 

stringname="Dakota"; 
outputBlock.Text+=convert(name)+"n"; 
} 
}

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ì)象:

publicclassStudent 
{ 
privatestring_stuName; 
privatestring_stuAge; 
privateint_stuClass; 

publicStudent(){} 

publicstringStuName 
{ 
get{return_stuName;} 
set{_stuName=value;} 
} 

publicstringStuAge 
{ 
get{return_stuAge;} 
set{_stuAge=value;} 
} 

publicintStuClass 
{ 
get{return_stuClass;} 
set{_stuClass=value;} 
} 

}

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

Studentstu=newStudent(); 
stu.StuName="Brian"; 
stu.StuAge="21"; 
stu.StuClass="1班";

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

Studentstu2=newStudent 
{ 
StuName="Brian", 
StuAge="21", 
StuClass="1班" 
};

從代碼中不難看出,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ù)查詢例子:

privatevoidBindGridView(stringcriteria) 
{ 
stringstrConn=ConfigurationManager.ConnectionStrings["connstr"].ConnectionString; 
NorthwindDbdb=newNorthwindDb(strConn); 

IEnumerableresults; 

if(criteria==string.Empty) 
{ 
results=db.Employee.ToArray(); 
} 
else 
{ 
results=(fromcindb.Employee 
wherec.FirstName.Contains(criteria) 
selectc).ToArray(); 

} 
GridView1.DataSource=results; 
GridView1.DataBind(); 
}

變量聲明

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

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

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

我們可以這樣聲明變量:

vari=10; 
varname="edisundong"; 
varnumbers=newint[]{1,2,3};

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

inti=10; 
stringname="edisundong"; 
int[]numbers=newint[]{1,2,3};

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

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

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

varinteger=10;
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ò)展功能的方法。

publicstaticclassStudentExtensionMethods 
{ 
publicStudentExtensionMethods() 
{ 
// 
//TODO:在此處添加構(gòu)造函數(shù)邏輯 
// 
} 
publicstaticstringGetStudentInformation(thisStudentstu) 
{ 
returnstring.Format("Name:{0}{1}Age:{2}",stu.StuName, 
stu.StuAge,stu.StuClass); 
} 
}

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

Studentstu2=newStudent 
{ 
StuName="Brian", 
StuAge="12", 
StuClass="1班" 
}; 
Console.WriteLine(stu2.GetPersonInformation());

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

相關(guān)文章

  • C#之泛型詳解

    C#之泛型詳解

    本文詳細(xì)講解了C#中的泛型,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#編程和Visual Studio使用技巧(下)

    C#編程和Visual Studio使用技巧(下)

    本文將介紹10個(gè)C#編程和Visual Studio IDE使用技巧,這也是近期我們發(fā)布的系列文章的下篇。
    2015-10-10
  • C# StreamReader類實(shí)現(xiàn)讀取文件的方法

    C# StreamReader類實(shí)現(xiàn)讀取文件的方法

    這篇文章主要介紹了C# StreamReader類實(shí)現(xiàn)讀取文件的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C#之lock的使用及說明

    C#之lock的使用及說明

    這篇文章主要介紹了C#之lock的使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • C# Task Cancellation使用總結(jié)

    C# Task Cancellation使用總結(jié)

    本文主要介紹了在使用CancellationTokenSource取消任務(wù)時(shí)的行為,以及如何使用Task的ContinueWith方法來處理任務(wù)的延續(xù)
    2024-12-12
  • C#實(shí)現(xiàn)向指定文本文件添加內(nèi)容的方法

    C#實(shí)現(xiàn)向指定文本文件添加內(nèi)容的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)向指定文本文件添加內(nèi)容的方法,涉及C#操作文本文件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C#執(zhí)行EXE文件與輸出消息的提取操作

    C#執(zhí)行EXE文件與輸出消息的提取操作

    這篇文章主要介紹了C#執(zhí)行EXE文件與輸出消息的提取操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • c#之關(guān)閉窗體的實(shí)現(xiàn)方法

    c#之關(guān)閉窗體的實(shí)現(xiàn)方法

    這篇文章主要介紹了c#之關(guān)閉窗體的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • C# PadLeft、PadRight用法詳解

    C# PadLeft、PadRight用法詳解

    本文主要介紹了C# PadLeft、PadRight用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • C#使用Npoi導(dǎo)出Excel并合并行列

    C#使用Npoi導(dǎo)出Excel并合并行列

    這篇文章主要為大家詳細(xì)介紹了C#使用Npoi導(dǎo)出Excel并合并行列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評(píng)論

渝中区| 正安县| 沁阳市| 安乡县| 兴仁县| 长武县| 秦安县| 烟台市| 揭西县| 建德市| 钟祥市| 茂名市| 综艺| 曲阜市| 崇礼县| 海口市| 亚东县| 错那县| 龙海市| 乌审旗| 禹州市| 同仁县| 敦煌市| 赤峰市| 孝感市| 英吉沙县| 翁牛特旗| 建始县| 濮阳县| 安溪县| 三门峡市| 信阳市| 内江市| 石屏县| 西乌| 沈丘县| 都江堰市| 正蓝旗| 武穴市| 瑞昌市| 缙云县|