自动属性
隐式类型
对象初始化器与集合初始化器
匿名类
扩展方法
Lambda表达式
(1)、自动属性(Auto-Implemented Properties)
C#自动属性可以避免原来这样我们手工声明一个私有成员变量以及编写get/set逻辑
//Demo:自动属性 public class User { public int Id { get; set; } public string Name { get; set; } public int Gender { get; set; } public int Age { get; set; } }
(2)、隐式类型(Var)
var 关键字指示编译器根据初始化语句右侧的表达式推断变量的类型。
不能在同一语句中初始化多个隐式类型的变量。
如果范围中有一个名为 var 的类型,则 var 关键字将解析为该类型名称,而不作为隐式类型局部变量声明的一部分进行处理。
var str = "Hello"; var list = new List<int>(); var json = new { Name = "Terry", Age = 34 }; json.Name var成就了匿名类 var expr = from c in customers where c.City == "London" select c; foreach (var ul in expr ) { Console.WriteLine("Uppercase: {0}, Lowercase: {1}", ul.Upper, ul.Lower); }
(3)、对象初始化器与集合初始化器
对象初时化器是利用了编译器对对象中的对外可见的字段或属性进行按序赋值,在编译还是隐式调用了构造函数,对字段或属性的赋值可以是一个或是多个。
(4)、匿名类
将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。 类型名由编译器生成,并且不能在源代码级使用。 每个属性的类型由编译器推断。[var]
用来初始化属性的表达式不能为 null、匿名函数或指针类型。
var v = new { Amount = 108, Message = "Hello" };
(5)、扩展方法
扩展方法实现的三要素:1、静态类 2、静态方法 3、this关键字
(6)、Lambda表达式
“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句。可用于创建委托。
运算符 =>,该运算符读为“goes to”。
格式:(input parameters) => expression
从匿名函数例子讲起:
delegate bool DelDemo(int a, int b); DelDemo fun = delegate(int a,int b) { return a > b; }; Console.WriteLine(fun(1, 3)); DelDemo funLambda = (int a, int b) => a > b; Console.WriteLine(funLambda(1,3));
List<string> strs = new List<string>() { "1","2","3","5" }; //var data = strs.FindAll(delegate(string strTemp) { // if (int.Parse(strTemp) > 2) // return true; // return false; //}); var data = strs.FindAll(strTemp => int.Parse(strTemp) > 2); foreach (var item in data) { Console.WriteLine(item); }