C#匿名类型及Lambda方法
来源:互联网 发布:中央部门预算软件 编辑:程序博客网 时间:2024/05/29 07:02
一、匿名类型产生的背景
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; } );
- C#匿名类型及Lambda方法
- C#匿名方法和lambda
- c#之委托、匿名方法、Lambda表达式
- C# 匿名方法和Lambda表达式
- C#匿名方法和Lambda表达式
- C# 委托用法、匿名方法、Lambda表达式
- C# 匿名方法和Lambda表达式
- C#匿名函数之匿名方法与lambda表达式
- 匿名方法、Lambda表达式
- 匿名方法 Lambda表达式
- 匿名方法、lambda
- C#委托,匿名方法和Lambda表达式(译)
- C#学习笔记-匿名方法和lambda表达式
- C#委托,匿名方法和Lambda表达式(译)
- C#委托,匿名方法和Lambda表达式(译)
- C#中的委托,匿名方法和Lambda表达式
- C#的委托,匿名方法和Lambda表达式
- C#中的委托,匿名方法和Lambda表达式
- LeetCode :String to Integer (atoi)
- c++primer习题4.35/4.34
- hdu http://acm.hdu.edu.cn/showproblem.php?pid=1584 蜘蛛牌
- MemberVirtual.cpp
- 写一函数,实现两个字符串的比较,即自己写一个strcmp函数
- C#匿名类型及Lambda方法
- java位运算符
- 索引及优化之表分析——《12年资深DBA教你Oracle开发与优化——性能优化部分》
- LeetCode : Subsets
- 用指针指向指针的方法对5个字符串排序并输出
- 转:Windows Shell 编程 第一章
- 表分析、约束及表间关系——《12年资深DBA教你Oracle开发与优化——性能优化部分》
- Oracle体系结构1——《12年资深DBA教你Oracle开发与优化——性能优化部分》
- Struts2的Stack Context和ValueStack