» 引用百度解释: 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并无影响,可是更方便程序员使用。一般来讲使用语法糖可以增长程序的可读性,从而减小程序代码出错的机会。 html
» 用一句话来简单描述:给咱们带来方便的快捷写法,编译器会帮咱们作转换,并且能够提升开发编码的效率,在性能上也不会带来损失程序员
» c#有不少种语法糖,接下来主要来说一下与Linq有关的一些语法糖(Lambda表达、自动属性、扩展方法、var、对象或集合初始化器、匿名类等)c#
一、Lambda表达式已经在上上一篇单独讲过它的演变由来https://www.cnblogs.com/lxshwyan/p/10815138.html函数
二、扩展方法在上一篇分三个部分讲过(在C#3.0以前没有扩展方法的状态(或者你不会使用不知道扩展方法的时候)、扩展方法的语法及怎么使用、怎么正确的使用扩展方法)https://www.cnblogs.com/lxshwyan/p/10815731.html 性能
三、自动属性学习
以前咱们封装属性快捷键:Ctrl+R+E =>弹出封装好的属性
编码
自动属性快捷键:输入字母 PROP+按两次Tab spa
/// <summary> /// 封装属性 /// </summary> private string _userName; public string UserName { get { return _userName; } set { _userName = value; } } /// <summary> /// 自动属性 /// </summary> public string Password { get; set; }
自动属性和封装属性相比没有从功能上没有区别,也能对set或get属性进行访问控制 code
/// <summary> /// 封装属性 /// </summary> private string _userName; public string UserName { get { return _userName; } protected set { _userName = value; } } /// <summary> /// 自动属性 /// </summary> public string Password { get; protected set; }
四、对象初始化器({})htm
以前咱们对一个对象赋赋初始值的时候必须这样写
UserInfo user1 = new UserInfo(); user1.UserName = "lxsh"; user1.PassWord = "123456"; user1.Age = 25; user1.Gender = 1;
如今使用对象初始化器后,能够这样写,但使用对象初始化器的对象必须有一个无参的构造函数
//属性以前必须用逗号隔开,最后一个逗号能够省略
UserInfo user2 = new UserInfo() { UserName = "lxsh", PassWord = "123456", Age = 25, Gender = 1, };
五、集合初始化器和对象初始化器相似({})
//以前咱们使用集合对集合給初始化值的时候,只能一个一个add List<UserInfo> userInfos1 = new List<UserInfo>(); userInfos1.Add(new UserInfo() { UserName = "lxsh" }); userInfos1.Add(new UserInfo() { UserName = "wy" }); userInfos1.Add(new UserInfo() { UserName = "ly" }); //如今使用集合初始化器的,能够没必要声明定义单个对象 List<UserInfo> userInfos2 = new List<UserInfo>() { new UserInfo() { UserName = "lxsh" }, new UserInfo() { UserName = "wy" }, new UserInfo() { UserName = "ly" } };
六、匿名类型(Var)
C#var和JS里面var含义不同,它有如下几个特色:
√ 它必须是定义的时候必须初始化值,否则会报错(不能其余类型同样先定义后赋值)
√ 一旦初始化值后,它已经隐使推导出该变量类型,不能再给他赋值其余类型的值
√ 它是局部变量,不能有public等其余访问修饰符
√ 它相似object,但不一样于object;它在效率上和使用强类型方式定义变量彻底同样
var i=0;与int i=0;其实就是同样,编译器自动会把var i=0变成int i=0(因此它在编译过程当中转换的,没有装箱拆箱的过程,和object不同)
七、匿名类new{}
匿名类在linq选择指定类型返回数据 select new { Name = "lxsh" + s.StudentName, Age = s.Age } 及与返回接收匿名类型var常常会一块儿使用
简单讲有时咱们须要相似上面返回的数据,在之前若是没有匿名类咱们只能单独定义一个类来封装Name、Age的属性类,来接收这些数据,但这样类型数据咱们可能只在当前程序中使用,不须要项目间重用,只在这一个地方使用, 单独定义一个类显然比较麻烦,若是咱们想增长属性还得再去修改该类,这样显然比较麻烦,影响效率;
如今有了匿名类型,咱们就不须要单独定义一个类来封装咱们想要的属性;
var student = new { name = "lxsh", age = 18 }; Console.WriteLine(student.name); Console.WriteLine(student.age);
当咱们想对student多加一个性别属性时 只须要简单修改就能够
var student = new { name = "lxsh", age = 18,gender=1 }; Console.WriteLine(student.name); Console.WriteLine(student.age); Console.WriteLine(student.gender);
八、内置泛型委托Action<T>(不能有返回值)
Action一共有16种泛型委托,从一个参数到16个参数的无返回值委托
九、内置泛型委托Func<T>(有返回值)
Func一共有16种泛型委托,从一个参数到16个参数的有返回值委托
Action<T>、Func<T>其实就是C#帮咱们封装了有返回值和无返回值的委托类型,咱们不须要单独去定义委托类型,用的时候只需实例化就能够 ,在这之前咱们每次用委托还要单独去建立委托类型,
-------了解了以上知识接下来我和你们一块儿来学习一下Linq语法