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



  • 相关阅读:
    [译]为什么你要学Go?
    类Lisp解释器JavaScript实现
    前端同学Windows中生存指北
    Virtualbox
    数据发布和上线日报&周报系统开发总结
    [Lab1]五分钟了解Makefile
    解决linux下解压来自windows的zip文件产生乱码的问题
    Arch使用过程中出现的问题汇总
    jQuery为什么移除了.toggle()方法
    Linux配置DNS
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3925318.html
Copyright © 2020-2023  润新知