lamada 表达式


  linq的基本功能是创建操作管道,以及这些操作需要的任何状态,这些操作表示了各种关于数据的
逻辑,如何刷选,如何排序以及如何将不同的数据源联接到一起,当linq查询在"进程内"执行的时候
那些操作通常用委托来表示:
   使用linq to object来处理数据的时,经常会出现一个语句包含几个委托的情况,C sharp3 的lambda表达
式在不牺牲可读性的前提下使这一切成为可能,
 
简而言之:: lamada 表达式 是对l
摘要由CSDN通过智能技术生成

  linq的基本功能是创建操作管道,以及这些操作需要的任何状态,这些操作表示了各种关于数据的
逻辑,如何刷选,如何排序以及如何将不同的数据源联接到一起,当linq查询在"进程内"执行的时候
那些操作通常用委托来表示:

   使用linq to object来处理数据的时,经常会出现一个语句包含几个委托的情况,C sharp3 的lambda表达

式在不牺牲可读性的前提下使这一切成为可能,

 

简而言之:: lamada 表达式 是对linq数据管线中的操作进行表示的一种符合语言习惯的方式:


1:作为委托的lambda表达式:
      从许多方面: lamada 表达式都可以看作事实C  sharp2的匿名方法的一种演变  ,匿名方法能做的几乎
一切事情都可以用lamada 表达式来完成:

 

  特别是: 捕获的变量在lambda表达式的行为和匿名方法是一样的,从显示的形式来看,两者并不大的区别,

只是lamada 表达式支持许多快捷语法,使它们更易读,更简练:


     与匿名方法相似.lamada 表达式有特殊的转换规则,表达式类型的本身并非委托类型,
但它可以通过多种方式隐式或显式地转换一个委托实例:

匿名函数这个术语同时涵盖了匿名方法和lambda表达式---在很多情况下,两者可以使用相同的转换规则:

 

  Func<string, int> returnLength;
            returnLength = delegate(string text) { return text.Length; };

            Console.WriteLine(returnLength("Hello"));

匿名方法是: delegate(string text) { return text.Length; };


也是打算转换成lamabda表达式的部分:

  lamada 表达式最冗长的形式是:
    (显式类型参数列表) => {语句};   //  => 这个东东用来告诉编译器:  我们正在使用一个lambda表达式


 Func<string, int> returnLength;
            returnLength = (string text) => { return text.Length; };


大多数的时候:  可以用一个表达式来表示整个主体,该表达式的值是lamabda的结果:
   格式即将变成:
   (显式类型的参数列表 => 表达式 )
   (string  text=>text.length

 

隐式类型的参数列表
  (隐式类型的参数列表) =>表达式:
 
  隐式类型的参数列表就是一个以逗号分隔的名称列表,没有类型,但显式类型和隐式类型的
参数不能混合使用----要么整个列表都是显式类型的,要么全部是隐式类型.除此之外如果有
任何out参数或 ref参数,就只能使用显式类型:
    可以继续写成:
 
 (text)=>text.length:

单一参数的快捷语法:
   如果 lamada 表达式只需一个参数,而且哪个参数可以隐式(指定)类型,C  sharp3就允许省略圆括号:

这种格式的 lamada 表达式是:
    参数名 => 表达式
  text=>text.length:
 


//*****:   使用list<t>事件简单的例子:
        对列表进行刷选,排序并设置其他操作:

     < list><t>的findall的方法,它获取一个predicate<T>,并返回一个新列表,新列表中包含原始列表中与
谓语匹配的所有的元素:
   sort方法获取一个comparision<T>,并相应地对列表进行排序,最后一个获取:foreach方法获取一个Action<T>
 ,对每个元素执行设置的行为:

      class FilmFilteringAndSorting
    {
        class Film
        {
            public string Name { get; set; }
            public int Year { get; set; }
        }
        static void Main()
        {
            var films = new List<Film>
            {
                new Film {Name="Jaws", Year=1975},
                new Film {Name="Singing in the Rain", Year=1952},
                new Film {Name=&#

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值