C#匿名类型及Lambda方法

一、匿名类型产生的背景

  C#是一种强类型语言,即每个变量都必须在使用前声明其数据类型,无论是语言内置的类型还是自定义类型。而我们了解在许多其他语言中变量是可以“直接使用的”,即无需声明,由编译器决定变量标识符,例如Matlab,Javascript,Lisp等。不知道是不是因为Linq中对查询语句的革新,使得匿名类型开始凸显价值。匿名方法,即Lambda表达式,是提高编码效率的一大利器,它的出现让你不再费劲脑汁为那些临时性的函数起名字。

二、语法

  1、定义匿名变量

   var 变量名 = new {初始化语句};

  var 变量名 = new[] {初始化语句};

  匿名类型直接继承至System.Object,编译器会将其编译为只含属性的类型,并自动为其重写Object类型的ToString()方法。另外,若初始化语句中属性的名称、数量完全一致,则编译器会将多个这样的匿名变量编译为同一个类型。

    var myAnony1 = new {Id = 1, Name = "tang", Age = 28}; //考虑到元素都是属性,故命名时建议以大些字母开头
    var myAnony2 = new {Id = 2, Name = "xiao", Age = 26}; //此处两个匿名变量会被编译为同一类型
    var peoples = new[] {new {Name = "LiMing", Age = 30},
                         new {Name = "LiuYangshu", Age = 23}}; //此处定义一个匿名数组

  2、定义Lambda表达式

  参数列表 => 函数体表达式

  其中参数列表可以是多个参数或为空,例如(i),(i,j),(),分别定义了1个、两个和空参数列表(当参数只有一个时,括号可以去掉);同时参数可以是显式定义和隐式定义的,上例中的参数都是隐式的。显式定义的例子如下:(int i),(int i, int j);

  函数体表达式中可以有多条语句。如果有多条语句需用{}将其包括其中(与if表达式类似)。

  通常Lambda表达式用在代表(delegate)中传递特定方法实例的地方。例如

List<int> evenNumbers = list.FindAll(i => (i % 2) == 0); //等于List<int> evenNumbers = list.FindAll(delegate(int i) { return (i % 2) == 0; } );


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值