» 引用百度解释: 语法糖(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. Native层和so接口和Java层

    一.Java层加载so文件 Android在Java层加载so的接口是System.loadLibrary()逐级调用的过程: System.loadLibrary()系统源码: 987    pub ...

  2. infinity新标签页失效

    安装infinity新标签页后,无法生效,或者infinity新标签页突然失效了. 驱动精灵的问题 驱动精灵安装后,还会安装其它的软件,在卸载后,安装的软件还存在. 解决办法 光卸载驱动精灵还不够,还 ...

  3. 通过Request对象获取请求的IP地址

    /** * 标识要从哪些消息头中获取IP地址 */ private static final String[] getIpArray = {"HTTP_X_FORWARDED_FOR&quo ...

  4. 【洛谷P5331】 [SNOI2019]通信

    洛谷 题意: \(n\)个哨站排成一列,第\(i\)个哨站的频段为\(a_i\). 现在每个哨站可以选择: 直接连接到中心,代价为\(w\): 连接到前面某个哨站\(j(j<i)\),代价为\( ...

  5. JS高阶---浏览器内核

    不同浏览器的内核,不太一样 360双核切换机制 一般涉及到金钱交易时,会切换到Trident内核,因为IE内核安全性较稳 不涉及金钱利益时,则会使用webkit内核 (1)内核是由很多模块构成 注意: ...

  6. JS高阶---对象

    四个问题 问题拓展:对象访问方式 1.属性名包含特殊字符,例如空格.-等 2.变量名不确定 变量名不确定时需要使用['属性名'] .

  7. 201871010121-王方-《面向对象程序设计(java)》第十二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/ ...

  8. chrony软件

    chrony简介 Chrony是一个开源的自由软件,它能保持系统时钟与时钟服务器(NTP)同步,让时间保持精确. 它由两个程序组成:chronyd和chronyc. chronyd是一个后台运行的守护 ...

  9. VUE小练习(按钮颜色,数组映射)

    VUE小练习(按钮颜色,数组映射) ## 1.有红.黄.蓝三个按钮,以及一个200x200矩形框box, 点击不同的按钮,box的颜色会被切换成指定的颜色 ''' 解法一:我本来的思路,把三个按钮绑定 ...

  10. 史上最全的CSP-J/S 第一轮知识点

    CSP-J/S 第一轮知识点选讲 \(NOIP\)(全国青少年信息学奥林匹克竞赛)于2019年取消.取而代之的是由\(CCF\)推出的非专业级软件能力认证,也就是现在的\(CSP-J/S\).作为一名 ...