c#Lamdba運算式與託付

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   io   strong   檔案   

介紹:

     “Lambda運算式”(lambda expression)是一個匿名函數,在C#3.0中引入了lambda運算式,它是對匿名函數的一種簡化,能夠包括運算式和語句,而且可用於建立託付或運算式資料夾樹狀目錄類型。

 

怎樣建立


格式:( 形參列表 ) => { 函數體 }

 

 

若要建立 Lambda運算式,須要在 Lambda運算子=>左側指定輸入參數(假設有),然後在還有一側輸入運算式或語句塊。比如,lambda運算式 x => x * x指定名為 x的參數並返回 x的平方值。如以下的示範範例所看到的,你能夠將此運算式分配給託付類型:

delegate int del(int i);static void Main(string[] args){    del myDelegate = x => x *x;    int j = myDelegate(5); //j = 25}

注意:函數體多於一條語句的可用大括弧括起。

以上函數體也能夠寫成

del myDelegate = x => { return x * x;};

使用 Lambda運算式


=> 運算子具有與賦值運算子 (=) 同樣的優先順序而且是右結合運算

僅當 lambda 僅僅有一個輸入參數時,括弧才是可選的;否則括弧是必需的。括弧內的兩個或很多其它輸入參數使用逗號加以分隔:

(x,y) => x == y 


使用Lamdba語句

語句 lambda 與運算式 lambda 運算式類似,僅僅是語句括在大括弧裡:

delegatevoid TestDelegate(string s);…TestDelegatemyDel = n => { string s = n + " " + "World";Console.WriteLine(s); }; myDel("Hello");


代碼中怎樣利用Lamdba

 

Lambda 在基於方法的 LINQ 查詢中用作標準查詢運算子方法(如Where)的參數。參數是託付類型System.Func<T, TResult>。 使用 Lambda 運算式建立該託付最為方便。 

看執行個體

 public delegate TResult Func<TArg0, TResult>(TArg0 arg0)

能夠將託付執行個體化為 Func<int,bool> myFunc,當中 int是輸入參數,bool 是返回值。 返回值始終在最後一個類型參數中指定。 Func<int, string, bool>定義包括兩個輸入參數(int 和 string)且傳回型別為 bool 的託付。 當調用以下的 Func 託付時,該託付將返回 true 或 false以指示輸入參數是否等於 5:  

Func<int,bool> myFunc = x => x == 5;boolresult = myFunc(4); // returns false of course

//項目中用到的一個小範例 public CommodityCollection Load(string type)        {             return this.Load(p =>            {                p.AppendItem("Code",type);            });        }

return中的load方法實際上是一個具有泛型的託付,p為繼承實現了SqlClauseBuilderUW的方法 

[Serializable]public abstract class SqlClauseBuilderUW : SqlClauseBuilderIUW{protected SqlClauseBuilderUW();public SqlClauseBuilderUW AppendItem<T>(string dataField, T data, string op, string template);public SqlClauseBuilderUW AppendItem<T>(string dataField, T data, string op, string template, bool isExpression);protected override SqlClauseBuilderItemBase CreateBuilderItem();}

public TCollection Load(Action<WhereSqlClauseBuilder> whereAction);

namespaceSystem{// 摘要://     封裝一個方法,該方法僅僅有一個參數而且不傳回值。//// 參數://   obj://     此託付封裝的方法的參數。//// 類型參數://   T://     此託付封裝的方法的參數類型。public delegate void Action<in T>(T obj);}

小結:


綜合應用能夠看出Lamdba能夠簡化查詢的方法,而且在Linq的使用中多與泛型託付,枚舉的where方法結合使用。是查詢方式簡化了非常多,可是內部構造卻與匿名函數同樣的.也是剛剛接觸瞭解,不足之處還請諒解。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.