c#Lamdba表达式与委托

释放双眼,带上耳机,听听看~!

介绍:

“Lambda表达式”(lambda expression)是一个匿名函数,在C#3.0中引入了lambda表达式,它是对匿名函数的一种简化,可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。

如何创建

格式:( 形参列表 ) => { 函数体 }

c#Lamdba表达式与委托

若要创建 Lambda表达式,需要在 Lambda运算符=>左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。例如,lambda表达式 x => x * x指定名为 x的参数并返回 x的平方值。如下面的示例所示,你可以将此**表达式分配给委托类型:


1
2
3
4
5
6
7
8
1delegate int del(int i);
2 static void Main(string[] args) {
3 del myDelegate = x => x *x;
4 int j = myDelegate(5);
5//j = 25
6 }  
7
8

**

**
注意:函数体多于一条语句的可用大括号括起。

以上函数体也可以写成


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

使用 Lambda表达式

=> 运算符具有与赋值运算符 (=) 相同的优先级并且是右结合运算

仅当 lambda 只有一个输入参数时,括号才是可选的;否则括号是必需的。括号内的两个或更多输入参数使用逗号加以分隔:

(x,y) => x == y

使用Lamdba语句


语句 lambda 与表达式 lambda 表达式类似,只是语句括在大括号中:


1
2
3
4
5
6
1delegatevoid TestDelegate(string s);
2…
3TestDelegatemyDel = n => { string s = n + " " + "World";Console.WriteLine(s); };
4
5myDel("Hello");
6

代码中如何利用Lamdba

Lambda 在基于方法的 LINQ 查询中用作标准查询运算符方法(如Where)的参数。参数是委托类型System.Func
。 使用 Lambda 表达式创建该委托最为方便。

看实例


1
2
1public delegate TResult Func(TArg0 arg0)
2

可以将委托实例化为 Func
myFunc,其中 int是输入参数,bool 是返回值。 返回值始终在最后一个类型参数中指定。 Func
定义包含两个输入参数(int 和 string)且返回类型为 bool 的委托。 当调用下面的 Func 委托时,该委托将返回 true 或 false以指示输入参数是否等于 5:


1
2
3
1Func myFunc = x => x == 5;
2boolresult = myFunc(4); // returns false of course
3

1
2
3
4
5
6
7
8
9
10
1//项目中用到的一个小例子
2public CommodityCollection Load(string type)
3        {
4
5            return this.Load(p =>
6            {
7                p.AppendItem("Code",type);
8            });
9        }
10

return中的load方法实际上是一个具有泛型的委托,p为继承实现了SqlClauseBuilderUW的方法


1
2
3
4
5
6
7
8
1[Serializable]
2   public abstract class SqlClauseBuilderUW : SqlClauseBuilderIUW
3   {
4       protected SqlClauseBuilderUW();
5
6       public SqlClauseBuilderUW AppendItem(string dataField, T data, string op, string template);
7       public SqlClauseBuilderUW AppendItem(string dataField, T data, string op, string template, bool isExpression); protected override SqlClauseBuilderItemBase CreateBuilderItem(); }
8

1
2
1public TCollection Load(Action whereAction);
2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1namespaceSystem
2{
3// 摘要:
4//     封装一个方法,该方法只有一个参数并且不返回值。
5//
6// 参数:
7//   obj:
8//     此委托封装的方法的参数。
9//
10// 类型参数:
11//   T:
12//     此委托封装的方法的参数类型。
13public delegate void Action(T obj);
14}
15

小结:


综合应用可以看出Lamdba可以简化查询的方法,并且在Linq的使用中多与泛型委托,枚举的where方法结合使用。是查询方式简化了很多,但是内部构造却与匿名函数相同的.也是刚刚接触了解,不足之处还请谅解。

**

给TA打赏
共{{data.count}}人
人已打赏
安全技术

bootstrap栅格系统自定义列

2021-12-21 16:36:11

安全技术

从零搭建自己的SpringBoot后台框架(二十三)

2022-1-12 12:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索