程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#Lamdba表達式與委托

c#Lamdba表達式與委托

編輯:C#入門知識

介紹:

“Lambda表達式”(lambda expression)是一個匿名函數,在C#3.0中引入了lambda表達式,它是對匿名函數的一種簡化,可以包含表達式和語句,並且可用於創建委托或表達式目錄樹類型。

如何創建


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

\

若要創建 Lambda表達式,需要在 Lambda運算符=>左側指定輸入參數(如果有),然後在另一側輸入表達式或語句塊。例如,lambda表達式 x => x * x指定名為 x的參數並返回 x的平方值。如下面的示例所示,你可以將此表達式分配給委托類型:<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:java;">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。 使用 Lambda 表達式創建該委托最為方便。

看實例

 public delegate TResult Func(TArg0 arg0)

可以將委托實例化為 Func myFunc,其中 int是輸入參數,bool 是返回值。 返回值始終在最後一個類型參數中指定。 Func定義包含兩個輸入參數(int 和 string)且返回類型為 bool 的委托。 當調用下面的 Func 委托時,該委托將返回 true 或 false以指示輸入參數是否等於 5:

Func 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(string dataField, T data, string op, string template);
		public SqlClauseBuilderUW AppendItem(string dataField, T data, string op, string template, bool isExpression);
		protected override SqlClauseBuilderItemBase CreateBuilderItem();
	}

public TCollection Load(Action whereAction);

namespaceSystem
{
// 摘要:
//     封裝一個方法,該方法只有一個參數並且不返回值。
//
// 參數:
//   obj:
//     此委托封裝的方法的參數。
//
// 類型參數:
//   T:
//     此委托封裝的方法的參數類型。
public delegate void Action(T obj);
}


小結:


綜合應用可以看出Lamdba可以簡化查詢的方法,並且在Linq的使用中多與泛型委托,枚舉的where方法結合使用。是查詢方式簡化了很多,但是內部構造卻與匿名函數相同的.也是剛剛接觸了解,不足之處還請諒解。



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved