標籤: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方法結合使用。是查詢方式簡化了非常多,可是內部構造卻與匿名函數同樣的.也是剛剛接觸瞭解,不足之處還請諒解。