实用干货!c#Lamdba表达式与委托C#开发工程师

/ 集美大学经济学院C#开发工程师 / 2017-05-14

C#,计算机编程,计算机语言,

在学习C#语言时,会不会感到很迷茫,汇鱼人才每天为大家分享能为你答疑解惑的实用干货,让你在学习的时候不在迷茫。

“Lambda表达式”是一个匿名函数,它简化了匿名委托的使用,让你让代码更加简洁,优雅,可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。

如何创建

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

lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者 “成为”。运算符将表达式分为两部分,左边指定输入参数,右边是lambda的主体。

        lambda表达式:

               1.一个参数:param=>expr

               2.多个参数:(param-list)=>expr

 

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

使用 Lambda表达式

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

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

(x,y) => x == y

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

delegatevoid TestDelegate(string s);

TestDelegatemyDel = n => { string s = n + " " + "World";Console.Writelike (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方法结合使用,查询方式简化了许多,但是内部构造与匿名函数是相同的今天的分享就这里,想要了解更多有用的资讯就关注汇鱼人才吧


公众号,微信

汇鱼网海峡创乐汇
汇鱼网海峡创乐汇