五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > [原創(chuàng)]Func〈T, TResult〉 泛型委托 以及演變歷程(整理自MSDN)

[原創(chuàng)]Func〈T, TResult〉 泛型委托 以及演變歷程(整理自MSDN)

文章來源:365jz.com     點(diǎn)擊數(shù):844    更新時間:2009-09-14 10:56   參與評論

以下內(nèi)容為菩提樹下的楊過根據(jù)微軟MSDN整理,轉(zhuǎn)貼請注明出處
 
MSDN對于Func<T, TResult>)的官方解釋:
封裝一個具有一個參數(shù)并返回 TResult 參數(shù)指定的類型值的方法。 

下面通過幾個例子對比下,就容易知道其用法:

以下例子演示了如何利用委托將字符串轉(zhuǎn)化為大寫:

    delegate string ConvertMethod(string inString);

    
private static string UppercaseString(string inputString)
    
{
        
return inputString.ToUpper();
    }


    
protected void Page_Load(object sender, EventArgs e)
    
{       
        
//ConvertMethod convertMeth = UppercaseString; 也可以這樣寫
        ConvertMethod convertMeth = new ConvertMethod(ppercaseString);
        
string name = "Dakota";
        Response.Write(convertMeth(name));
//通過委托調(diào)用UppercaseString方法
    }

   
這段代碼很容易理解,定義一個方法UppercaseString,功能很簡單:將字符串轉(zhuǎn)化為大寫,然后定義一個ConvertMethod的實(shí)例來調(diào)用這個方法,最后將Dakota轉(zhuǎn)化為大寫輸出


接下來改進(jìn)一下,將Page_Load中的 ConvertMethod convertMeth = new ConvertMethod(ppercaseString)改為Func 泛型委托,即:

  protected void Page_Load(object sender, EventArgs e)
    
{
        Func
<stringstring> convertMeth = UppercaseString;
        
string name = "Dakota";
        Response.Write(convertMeth(name));  

    }


   
 運(yùn)行后,與前一種寫法結(jié)果完全相同,這里再聯(lián)系官方解釋想一想,F(xiàn)unc<string, string>即為封閉一個string類型的參數(shù),并返回string類型值的方法

當(dāng)然,我們還可以利用匿名委托,將這段代碼寫得更簡潔:

protected void Page_Load(object sender, EventArgs e)
    
{
        Func
<stringstring> convertMeth = delegate(string s) return s.ToUpper(); };
        
string name = "Dakota";
        Response.Write(convertMeth(name));
    }
 

   
怎么樣?是不是清爽很多了,但這并不是最簡潔的寫法,如果利用Lambda表達(dá)式,還可以再簡化:

protected void Page_Load(object sender, EventArgs e)
    
{
        Func
<stringstring> convertMeth = s => s.ToUpper();
        
string name = "Dakota";
        Response.Write(convertMeth(name));
    }

   
現(xiàn)在應(yīng)該體會到什么叫“代碼的優(yōu)雅和簡潔”了吧? 記起了曾經(jīng)學(xué)delphi時,一位牛人的預(yù)言:以后可能會出現(xiàn)一種新學(xué)科:程序美學(xué)! 對此,我深信不疑:優(yōu)秀的代碼就是一種美!

在linq to sql中其實(shí)大量使用了Func<T, TResult>這一泛型委托,下面的例子是不是會覺得很熟悉:

protected void Page_Load(object sender, EventArgs e)
    
{
        Func
<stringstring> convertMeth = str => str.ToUpper();        
        
string[] words = "orange""apple""Article""elephant" };        
        IEnumerable
<String> aWords = words.Select(convertMeth);
        
foreach (String s in aWords)
        
{
            Response.Write(s 
+ "<br/>");
        }

    }


如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答?。?點(diǎn)擊進(jìn)入論壇

發(fā)表評論 (844人查看,0條評論)
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動的言論。
昵稱:
最新評論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號