» 引用百度解释: 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。   

 » 用一句话来简单描述:给我们带来方便的快捷写法,编译器会帮我们做转换,而且可以提高开发编码的效率,在性能上也不会带来损失

      » c#有很多种语法糖,接下来主要来讲一下与Linq有关的一些语法糖(Lambda表达、自动属性、扩展方法、var、对象或集合初始化器、匿名类等)

1、Lambda表达式已经在上上一篇单独讲过它的演变由来https://www.cnblogs.com/lxshwyan/p/10815138.html

2、扩展方法在上一篇分三个部分讲过(在C#3.0之前没有扩展方法的状态(或者你不会使用不知道扩展方法的时候)、扩展方法的语法及怎么使用、怎么正确的使用扩展方法)https://www.cnblogs.com/lxshwyan/p/10815731.html

3、自动属性

之前我们封装属性快捷键:Ctrl+R+E =>弹出封装好的属性

自动属性快捷键:输入字母 PROP+按两次Tab

        /// <summary>
/// 封装属性
/// </summary>
private string _userName;
public string UserName
{
get { return _userName; }
set { _userName = value; }
}
/// <summary>
/// 自动属性
/// </summary>
public string Password { get; set; }

自动属性和封装属性相比没有从功能上没有区别,也能对set或get属性进行访问控制

/// <summary>
/// 封装属性
/// </summary>
private string _userName;
public string UserName
{
get { return _userName; }
protected set { _userName = value; }
}
/// <summary>
/// 自动属性
/// </summary>
public string Password { get; protected set; }

4、对象初始化器({})

之前我们对一个对象赋赋初始值的时候必须这样写

            UserInfo user1 = new UserInfo();
user1.UserName = "lxsh";
user1.PassWord = "";
user1.Age = ;
user1.Gender = ;

现在使用对象初始化器后,可以这样写,但使用对象初始化器的对象必须有一个无参的构造函数

    //属性之前必须用逗号隔开,最后一个逗号可以省略        
UserInfo user2 = new UserInfo()
{
UserName = "lxsh",
PassWord = "",
Age = ,
Gender = ,
};

5、集合初始化器和对象初始化器类似({})

  //之前我们使用集合对集合給初始化值的时候,只能一个一个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" }
};

6、匿名类型(Var)

C#var和JS里面var含义不一样,它有以下几个特点:

√ 它必须是定义的时候必须初始化值,不然会报错(不能其他类型一样先定义后赋值)

          √ 一旦初始化值后,它已经隐使推导出该变量类型,不能再给他赋值其他类型的值

它是局部变量,不能有public等其他访问修饰符

          √ 它类似object,但不同于object;它在效率上和使用强类型方式定义变量完全一样

var i=0;与int i=0;其实就是一样,编译器自动会把var i=0变成int i=0(所以它在编译过程中转换的,没有装箱拆箱的过程,和object不一样)

7、匿名类new{}

匿名类在linq选择指定类型返回数据 select new { Name = "lxsh" + s.StudentName, Age = s.Age } 及与返回接收匿名类型var经常会一起使用

简单讲有时我们需要类似上面返回的数据,在以前如果没有匿名类我们只能单独定义一个类来封装Name、Age的属性类,来接收这些数据,但这样类型数据我们可能只在当前程序中使用,不需要项目间重用,只在这一个地方使用, 单独定义一个类显然比较麻烦,如果我们想增加属性还得再去修改该类,这样显然比较麻烦,影响效率;

现在有了匿名类型,我们就不需要单独定义一个类来封装我们想要的属性;

 var student = new { name = "lxsh", age =  };
Console.WriteLine(student.name);
Console.WriteLine(student.age);

当我们想对student多加一个性别属性时 只需要简单修改就可以

var student = new { name = "lxsh", age = ,gender= };
Console.WriteLine(student.name);
Console.WriteLine(student.age);
Console.WriteLine(student.gender);

8、内置泛型委托Action<T>(不能有返回值)

Action一共有16种泛型委托,从一个参数到16个参数的无返回值委托

9、内置泛型委托Func<T>(有返回值)

Func一共有16种泛型委托,从一个参数到16个参数的有返回值委托

Action<T>、Func<T>其实就是C#帮我们封装了有返回值和无返回值的委托类型,我们不需要单独去定义委托类型,用的时候只需实例化就可以 ,在这以前我们每次用委托还要单独去创建委托类型,

-------了解了以上知识接下来我和大家一起来学习一下Linq语法

学习Linq之前必须知道的几种语法糖的更多相关文章

  1. Lua 学习之基础篇十<Lua 常见的语法规则>

    下面讲一些lua 常见的用法和规则,可以为学习理解lua带来帮助,最后附上的部分是lua的基本操作,基本包含所有常用语法语句. 1. if判断 lua把 nil 和false 视为"假&qu ...

  2. 白话LINQ系列2---以代码演进方式学习LINQ必备条件

    今天,我们通过一个简单的示例代码的演进过程,来学习LINQ必备条件:隐式类型局部变量:对象集合初始化器:委托:匿名函数:lambda表达式:扩展方法:匿名类型.废话不多说,我们直接进入主题. 一.实现 ...

  3. C#深度学习のLINQ

    一.LINQ的由来 LINQ是Language Integrated Query的缩写,意思是语言扩展查询 查询是一种从数据源检索数据的表达式. 查询通常用专门的查询语言来表示. 随着时间的推移,人们 ...

  4. 学习LINQ必备条件

    转自:http://www.cnblogs.com/VolcanoCloud/p/4451302.html 学习LINQ必备条件:隐式类型局部变量:对象集合初始化器:委托:匿名函数:lambda表达式 ...

  5. js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq

    js_html_input中autocomplete="off"在chrom中失效的解决办法 分享网上的2种办法: 1-可以在不需要默认填写的input框中设置 autocompl ...

  6. LinqPad工具:帮你快速学习Linq

    LinqPad工具:帮你快速学习Linq 参考: http://www.cnblogs.com/li-peng/p/3441729.html ★:linqPad下载地址:http://www.linq ...

  7. 学习LINQ,发现一个好的工具。LINQPad!!

    今日学习LINQ,发现一个好的工具.LINQPad!! 此工具的好处在于,不需要在程序内执行,直接只用工具测试.然后代码通过即可,速度快,简洁方便. 可以生成其LINQ查询对应的lambda和SQL语 ...

  8. LINQ to Objects系列(2)两种查询语法介绍

    LINQ为我们提供了两种查询语法,分别是查询表达式和查询方法语法.这篇文章分为以下几个方面进行总结. 1,一个包含两种查询语法的简单示例 2,查询表达式的结构 3,查询方法相关的运算符 一个包含两种查 ...

  9. 学习workerman之前需要知道的几种php回调写法

    在workerman中会经常使用,我们先写一个回调函数,当某个行为被触发后使用该函数处理相关逻辑. 在PHP中最常用的几种回调写法如下 匿名函数做为回调 匿名函数(Anonymous function ...

随机推荐

  1. GCN 简单numpy实现

    `#参考:https://blog.csdn.net/weixin_42052081/article/details/89108966 import numpy as np import networ ...

  2. Spark之RDD

    Spark学习之路Spark之RDD 目录 一.RDD的概述 1.1 什么是RDD? RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数 ...

  3. 使用类似GeoJson的数据生成物体(建筑等)的功能逻辑

    GeoJson作为一种模型传输格式, 用的最多的就是地图里面的各种简单模型了, 比如下图中很贴切的俄罗斯方块楼: 它的格式大概就是下面这样: { "type": "Fea ...

  4. JS高阶---继承模式(借用构造函数继承+组合继承)

    (1)借用构造函数继承 案例如下: 验证: (2)组合继承 案例如下: 验证如下: 结果如右图所示 . .

  5. 201871010105-曹玉中《面向对象程序设计(java)》第十四周学习总结

    201871010105-曹玉中<面向对象程序设计(java)>第十四周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  6. 201871010107-公海瑜《面向对象程序设计(java)》第十二周学习总结

    201871010107-公海瑜<面向对象程序设计(java)>第十二周学习总结              项目                                内容     ...

  7. 01-numpy-笔记-empty

    import numpy as np >>> a = np.empty([2,3]) >>> a array([[0.00000000e+000, 4.935933 ...

  8. WebJars简介 —— 前端资源的jar包形式(以后接触到再深入总结)

    对于日常的web开发而言,像css.js.images.font等静态资源文件管理是非常的混乱的.比如jQuery.Bootstrap.Vue.js等,可能每个框架使用的版本都不一样.一不注意就会出现 ...

  9. VMware虚拟机安装使用及系统安装教程

    虚拟机是利用软件来模拟出完整计算机系统的工具.具有完整硬件系统功能的.运行在一个完全隔离环境中.虚拟机的使用范围很广,如未知软件评测.运行可疑型工具等,即使这些程序中带有病毒,它能做到的只有破坏您的虚 ...

  10. map的基本操作

    向map添加元素: 因为map是不允许出现重复关键字的,所以如果重复插入键相同的元素后面的元素是不会插入成功的,下面是一个验证程序: #include<iostream> #include ...