日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

注意.NET中容易混淆的幾組重要概念(3)_.Net教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:如何在ASP.Net中實(shí)現(xiàn)RSA加密
在我們實(shí)際運(yùn)用中,加密是保證數(shù)據(jù)安全的重要手段。以前使用ASP時,對數(shù)據(jù)加密可以使用MD5和SHA1算法,這兩種算法雖然快捷有效,但是無法對通過它們加密的密文進(jìn)行反運(yùn)算,即是解密。因此需要解密數(shù)據(jù)的場合,這兩種方法就不太適合了。當(dāng)然你也可以自己編寫

Lambda Expression / Expression Tree / 匿名方法

Lambda Expression從定義上講是指帶有“=>”符號的表達(dá)式,例如:

以下為引用的內(nèi)容:
◆x => x 1
◆(x, y) => x > y
◆() => 5
◆(x, y) => { return x > y; }

Lambda Expreesion本身并不會在概念上引起混淆,不過由于在C# 3.0中Lambda Expression有兩種截然不同的使用方式,有些朋友就會產(chǎn)生疑問,究竟Lambda Expression是做什么用的?

Lambda Expression的一個重要作用就是提供一種使用匿名方法的新語法,在《您善于使用匿名函數(shù)嗎?》一文中您可以看到這種使用方式。利用Lambda Expression表示匿名函數(shù)的一個重要的缺點(diǎn)就是無法使用帶out或ref關(guān)鍵字的參數(shù),不過它比使用delegate關(guān)鍵字的表示法略為簡單一點(diǎn),因?yàn)闊o需提供參數(shù)類型,例如:

以下為引用的內(nèi)容:
public static bool CallMethod(Func method)
{
return method(0);
}

static void Main(string[] args)
{
CallMethod(delegate(int a) { return false; });
CallMethod(a => { return false; });
}

可見,使用Lambda Expression表示的匿名方法無需指定參數(shù)類型,因?yàn)檫@一切都已經(jīng)交給編譯器來判斷了。這一點(diǎn)在參數(shù)類型長而復(fù)雜的情況下(例如并行庫中的方法)非常重要。因此現(xiàn)在要不是會涉及到out/ref參數(shù),我都會使用Lambda Expression來表示匿名方法。

Lambda Expression的另一個作用自然就是構(gòu)造一個LambdaExpression對象。任意一個Expression對象都表示了一個Expression Tree的根節(jié)點(diǎn),而開發(fā)人員可以通過解析這個Expression Tree來實(shí)現(xiàn)特定的功能。我們編寫的方法可以接受一個Lambda Expression作為參數(shù),但是我們還必須對這個參數(shù)的形式進(jìn)行限制,這個參數(shù)才能有意義。這時候我們就會使用Expression類型作為方法的參數(shù)類型,這樣在使用這個方法時就必須使用滿足TDelegate的簽名及返回值的Lambda Expression才能編譯通過。例如:

以下為引用的內(nèi)容:
public static void CallMethod(Expression> prediect) { ... }

static void Main(string[] args)
{
CallMethod(a => a > 0);
}

解析一個Expression Tree并不是一件簡單的事情,一定程度上這相當(dāng)于在進(jìn)行編譯工作,只是最終生成的結(jié)果不是機(jī)器碼或IL,而是一個執(zhí)行結(jié)果,并且語法解析的過程已經(jīng)由C#編譯器幫我們完成了。我在《擴(kuò)展LINQ to SQL:使用Lambda Expression批量刪除數(shù)據(jù)》一文中曾經(jīng)提到過這一點(diǎn),并且給出了一個實(shí)例,感興趣的朋友們可以參考一下。

需要注意的是,如果在構(gòu)造一個Expression對象時,Lambda Expression的Body部分不能是Statement;而在表示一個匿名對象時Lambda Expression的Body既可以是Expression也可以是Statement。無論是使用Expression還是Statement作為Body,只要表示的含義相同,編譯器都會生成一樣的匿名函數(shù)。例如以下兩種寫法其實(shí)是等價的:

以下為引用的內(nèi)容:
◆(x, y) => x > y
◆(x, y) => { return (x > y); }

最后,我留給大家一個問題:以下兩個做法的結(jié)果是相同的,而代碼也非常接近。不過它們其實(shí)有著非常大的區(qū)別,您能指出嗎?

以下為引用的內(nèi)容:
var intList = new List() { 1, 2, 3, 4, 5 };
foreach (int i in intList.Where(i => i % 2 == 1))
{
Console.WriteLine(i);
}

var intList = new List() { 1, 2, 3, 4, 5 }.AsQueryable();
foreach (int i in intList.Where(i => i % 2 == 1))
{
Console.WriteLine(i);
}

分享:怎樣使ASP.NET實(shí)現(xiàn)頁面?zhèn)髦?/a>
第一種方法 通過URL鏈接地址傳遞 以下為引用的內(nèi)容: send.aspx: protected void Button1_Click(object sender, EventArgs e) { Request.Redirect(Default2.aspx?username=honge); } receive.aspx: string username = Request.QueryString[username];這樣可

共3頁上一頁123下一頁
來源:模板無憂//所屬分類:.Net教程/更新時間:2009-06-27
相關(guān).Net教程