c#Lamdba表达式与委托

介绍:

“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方法结合使用。是查询方式简化了很多,但是内部构造却与匿名函数相同的.也是刚刚接触了解,不足之处还请谅解。

c#Lamdba表达式与委托

时间: 2024-08-15 06:46:56

c#Lamdba表达式与委托的相关文章

C#高级编程9-委托、lamdba表达式和事件

委托.lamdba表达式和事件 1.引用方法 2.委托 声明委托 使用委托 系统委托 BubbleSorter 多播委托 匿名方法 3.lamdba表达式 参数 多行代码 闭包 foreach闭包 4.事件 事件发布程序 事件侦听器 弱事件 @author duanlaibao @help C# Advanced programming.Nine @date 13:31:36

Java8 Lamdba表达式 002

本篇将讲述lamdba表达式的排序,本例包含一个Player对象的集合[稍后定义],通过每个player的分数高低对列表的player进行排序,类定义001如下 public class SortingPlayer { public static void main(String[] args) { List<Player> playerList = new ArrayList<>(); playerList.add(new Player("Black", &q

表达式树,它与表达式、委托

表达式树,它与表达式.委托有什么区别? 序言 首先,需要普及下基础知识: Expression我们称之为:表达式树, 而Func<>或者Action 称之为:匿名委托,Func与Action的区别是Func带返回值(至少一个参数),Action不带返回值(可以没有任何参数). 以上的关键词是在.net 3.5之后出现的,配合Linq中Lambda使用. 当然Expression还可以动态的进行构造它,而不使用Lambda表达式来定义. 什么是表达式树 它是一种数据结构体,用于存储需要计算.运算

c#Lamdba表达式与托付

介绍: "Lambda表达式"(lambda expression)是一个匿名函数,在C#3.0中引入了lambda表达式,它是对匿名函数的一种简化,能够包括表达式和语句,而且可用于创建托付或表达式文件夹树类型. 怎样创建 格式:( 形參列表 ) => { 函数体 } 若要创建 Lambda表达式,须要在 Lambda运算符=>左側指定输入參数(假设有),然后在还有一側输入表达式或语句块.比如,lambda表达式 x => x * x指定名为 x的參数并返回 x的平方

Java8 Lamdba表达式 001

在一个已经存在的编程语言里非常少有对现有的生态系统起重大影响的新特性.Lambda表达式对于Java语言就是这样的意义的存在.简单来说,Lambda表达式提供了便利的方式去创建一个匿名的功能.提供了一个简单的方式使用表达式或一系列的状态创建一个简单方法.Lambda表达式是包括一个抽象方法的接口.Lamdba表达式能够用来创建简单的匿名功能来实现对集合元素的排序和过滤,还能分配变量并传递到其它对象中.等等.以下将结合样例来加深大家对Lamdba的理解. 首先讲一下安装配置 要想使用Lamdba,

Java8 Lamdba表达式 003

继续lamdba.上篇Java8 Lamdba表达式 002讲了使用lamdba对集合元素进行排序,本篇讲述使用lamdba对集合元素过滤,演示样例代码沿用上篇: 001 public class SortingPlayer { public static void main(String[] args) { List<Player> playerList = new ArrayList<>(); playerList.add(new Player("Black"

lamdba表达式

1 #include <iostream> 2 #include <string> 3 #include <vector> 4 #include <algorithm> 5 using namespace std; 6 14 int main(int argc, const char *argv[]) 15 { 16 vector<int> vec; 17 18 vec.push_back(99); 19 vec.push_back(87); 2

什么是表达式树,它与表达式、委托有什么区别?

序言 首先,需要普及下基础知识: Expression我们称之为:表达式树, 而Func<>或者Action 称之为:匿名委托,Func与Action的区别是Func带返回值(至少一个参数),Action不带返回值(可以没有任何参数). 以上的关键词是在.net 3.5之后出现的,配合Linq中Lambda使用. 当然Expression还可以动态的进行构造它,而不使用Lambda表达式来定义. 什么是表达式树 它是一种数据结构体,用于存储需要计算.运算的一种结构.这种结构可以只是”存储“,而

C#中通过Lambda表达式为委托传入更多的参数

如: DispatcherTimer dispatcherTimer = new DispatcherTimer(); dispatcherTimer.Tick += (o, e) => { dispatcherTimer_Tick(o, e, driverVM); }; dispatcherTimer.Interval = new TimeSpan(0, 0, 2); dispatcherTimer.Start(); 上述红色代码处,dispatcherTimer.Tick接受的委托为void