一. C# 6.0 新语法

1. 自动属性初始化可以赋值

     /// <summary>
/// 自动属性初始化
/// </summary>
public class UserInfor
{
public string userId { get; set; } = ""; public string userName { get; set; } = "lmr"; }
{
Console.WriteLine("------------------------- 1. 自动属性初始化可以赋值----------------------------");
UserInfor uInfor = new UserInfor();
Console.WriteLine($"id={uInfor.userId},userName={uInfor.userName}");
}

2. 字符串嵌入值【$配合{}使用】

  特别注意:{}中如果有业务计算需要配合()使用

    {
Console.WriteLine("------------------------- 2. 字符串嵌入值【$配合{}使用】----------------------------");
UserInfor uInfor2 = new UserInfor();
Console.WriteLine($"名字为:{uInfor2.userName}");
//代表要输入一个括号{}
Console.WriteLine($"名字为:{{{uInfor2.userName}}}");
//{}中如果有业务计算需要配合()使用
Console.WriteLine($"{(uInfor2.userName != "lmr" ? "小鲜肉" : "老鲜肉")}");
}

3. 可以在命名空间出使用static声明静态类

 {
Console.WriteLine($"-------------------------3.可以在命名空间出使用static声明静态类-------------------------");
Console.WriteLine($"之前的使用方式: {Math.Pow(4, 2)}");
Console.WriteLine($"导入后可直接使用方法: {Pow(4, 2)}");
}

4. 空值运算符(?)

  不需要判断是否为空了.

  {
Console.WriteLine($"-------------------------4. 空值运算符-------------------------");
int? iValue = ;
Console.WriteLine(iValue?.ToString());//不需要判断是否为空
string name = null;
Console.WriteLine(name?.ToString());
}

5. 对象初始化

  可以直接给字典类型通过类似“索引”的形式赋值 (原先是通过Add方法赋值)

  {
Console.WriteLine($"-------------------------5. 字典对象初始化-------------------------");
Dictionary<string, string> dicList = new Dictionary<string, string>()
{
[""] = "ypf1",
[""] = "ypf2",
[""] = "ypf3"
};
Dictionary<string, string> dicList2 = new Dictionary<string, string>()
{
{ "","lmr1"},
{ "","lmr2"},
{ "","lmr3"}
};
foreach (var item in dicList)
{
Console.WriteLine("key:{0},value:{1}", item.Key.ToString(), item.Value.ToString());
}
foreach (var item in dicList2)
{
Console.WriteLine("key:{0},value:{1}", item.Key.ToString(), item.Value.ToString());
}
}

6. 异常过滤器增加when判断条件

  只有符合when里的条件,才能进入catch,如果不满足的话,直接代码报错,不能抛异常

   {
Console.WriteLine("-------------------------6. 异常过滤器增加when判断条件-------------------------");
int epCheck = ;
try
{
int.Parse("ypf");
}
catch (Exception e) when (epCheck > )
{
Console.WriteLine(e.Message);
}
}

7. nameof表达式

  把实例转换成同名的字符串

  {
Console.WriteLine("-------------------------7. nameof表达式-------------------------");
UserInfor userInfor = new UserInfor();
Console.WriteLine(nameof(userInfor));
}

8. 在catch和finally语句块里使用await(暂不介绍,不常用)

9. 在属性或方法上使用Lambada表达式

  ①:方法针对于只有一行的方法

  ②:属性通过Lambda的形式进行赋值

   public class UserInfor
{
public string userId { get; set; } = ""; public string userName { get; set; } = "lmr"; /// <summary>
/// Lambda类型的方法
/// </summary>
public void LambdaPrint() => Console.WriteLine("我是Lambda类型的方法"); public string userSex => string.Format("男");
}
{
Console.WriteLine("-------------------------9.在属性或方法上使用Lambada表达式-------------------------");
UserInfor userInfor = new UserInfor();
userInfor.LambdaPrint();
Console.WriteLine($"userSex的值为:{userInfor.userSex}");
}

二. C# 7.0 新语法

1. out参数的改进

  在C#7.0之前, out参数使用前必须先声明,然后传入方法中,在C#7.0后可以直接在传入方法的时候进行声明。

         /// <summary>
/// out参数的改进
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
public void DoNoting(out int x, out int y)
{
x = ;
y = ;
}
{
Console.WriteLine("--------------------1-out参数的改进------------------------");
SevenEdition s = new SevenEdition();
s.DoNoting(out int x, out int y);
Console.WriteLine(x + y);
}

2. 元组(Tuples)

  ①:需要通过nuget安装这个System.ValueTuple包

  ②:元组创建的三种方式:语法糖、Create静态方法、构造函数 (默认情况下是通过Item1、Item2 。。。)

  ③:指定元祖命名:可以通过左边指定,也可以通过右边指定

  ④:将元祖应用于方法中返回值,即一个方法可以返回多种不同类型的值,不需要封装实体即可以实现。

         /// <summary>
/// 默认元组命名
/// </summary>
/// <returns></returns>
public (int, string, string) TupleWay1()
{
return (, "ypf1", "ypf2");
}
/// <summary>
/// 指定元祖命名
/// </summary>
/// <returns></returns>
public (int m, string n, string k) TupleWay2()
{
return (, "ypf1", "ypf2");
}
{
Console.WriteLine("--------------------2-元组(Tuples)------------------------");
//1. 创建元组的三种形式
Console.WriteLine("--------------------1. 创建元组的三种形式------------------------");
var tuple1 = (, ); //语法糖
var tuple2 = ValueTuple.Create("ypf", "lmr"); //Create静态方法
var tuple3 = new ValueTuple<int, string>(, "ypf12"); //构造函数
Console.WriteLine($"tuple1的两个值为:{tuple1.Item1}和{tuple1.Item2}");
Console.WriteLine($"tuple1的两个值为:{tuple2.Item1}和{tuple2.Item2}");
Console.WriteLine($"tuple1的两个值为:{tuple3.Item1}和{tuple3.Item2}"); //2. 指定元祖命名
Console.WriteLine("--------------------2. 指定元祖命名------------------------");
(int m, string n) tuple4 = (, "erp"); //左边命名
Console.WriteLine($"tuple4的两个值为:{tuple4.m}和{tuple4.n}");
var tuple5 = (one: , two: "spz"); //右边命名
Console.WriteLine($"tuple5的两个值为:{tuple5.one}和{tuple5.two}"); //3. 元祖应用于方法中返回值
Console.WriteLine("--------------------3. 元祖应用于方法中返回值------------------------");
SevenEdition s = new SevenEdition();
//默认命名
var result1 = s.TupleWay1();
Console.WriteLine($"返回值有:{result1.Item1}、{result1.Item2}、{result1.Item3}");
//指定命名
var result2 = s.TupleWay2();
Console.WriteLine($"返回值有:{result2.m}、{result2.n}、{result2.k}"); }

3. 局部函数

  即在{}中声明一个函数,只有{}中能使用

   {
Console.WriteLine("--------------------3-局部函数------------------------");
DoSome();
void DoSome()
{
Console.WriteLine("我是局部函数");
}
}

4. 模式的比较和匹配

  ①:is的新模式。

    首先补充一个概念:拆箱和装箱

    拆箱是将引用类型→值类型 (object ,class均为引用类型)

    装箱是将值类型→引用类型

  案例:有一个object类型的变量a,如果它是int类型,则+10赋值给m,并输出m的值,下面看新老用法比较。

  {
Console.WriteLine("--------------------4-模式比较(is)------------------------");
object a = ;
//老写法
if (a is int)
{
int b = (int)a; //拆箱
int c = b + ;
Console.WriteLine($"老写法c的值为:{c}");
}
//新写法
if (a is int m) //这里的a直接拆箱为m
{
int c = m + ;
Console.WriteLine($"新写法c的值为:{c}");
}
}

  ②:switch-case中可以自定义参数类型

  传统情况,所有的case中必须是同类型的;而在C# 7.0 新版本中,case中可以不同类型,即Swich中可以传入任何类型,然后通过case中进行对应匹配,这就叫做模式匹配。

  /// <summary>
/// 单一类型
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
public dynamic SwitchWay1(string m)
{
dynamic data;
switch (m)
{
case "ypf1":
data = m + "lmr1";
break;
case "ypf2":
data = m + "lmr2";
break;
default:
data = "spz00000";
break;
}
return data;
} /// <summary>
/// 多种类型
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
public dynamic SwitchWay2(object m)
{
dynamic data;
switch (m)
{
case int a when a > :
data = a + ;
break;
case int b:
data = b + ;
break;
case String c:
data = c + "mmmmmmmmmmmmmmm";
break;
default:
data = "spz00000";
break;
}
return data;
}
    {
Console.WriteLine("--------------------4-模式匹配(switch-case)------------------------");
SevenEdition sE = new SevenEdition();
//老用法
var data1 = sE.SwitchWay1("ypf1");
Console.WriteLine($"类型为:{data1.GetType()},值为:{data1}");
//新用法
var data2 = sE.SwitchWay2();
Console.WriteLine($"类型为:{data2.GetType()},值为:{data2}"); var data3 = sE.SwitchWay2();
Console.WriteLine($"类型为:{data3.GetType()},值为:{data3}"); var data4 = sE.SwitchWay2("ypf1");
Console.WriteLine($"类型为:{data4.GetType()},值为:{data4}"); }

5. 数字文本语法的改写

   比如10000000 可以写成10_000_000 ,方便识别。

 {
Console.WriteLine("--------------------5-数字文本语法的改写------------------------");
long a = ;
long b = 10_000_000;
Console.WriteLine($"a的值为:{a},b的值为:{b}"); }

6. 补充一些特殊地方也可以写异常表达式 (不详细测试了)

  比如:条件表达式(? :)、null合并运算符(??)、一些Lambda

  eg:private string _name = GetName() ?? throw new ArgumentNullException(nameof(GetName));

第十六节:语法总结(3)(C#6.0和C#7.0新语法)的更多相关文章

  1. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

  2. 第一百二十六节,JavaScript,XPath操作xml节点

    第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准 ...

  3. centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课

    centos  shell脚本编程2 if 判断  case判断   shell脚本中的循环  for   while   shell中的函数  break  continue  test 命令   ...

  4. 第十六节、基于ORB的特征检测和特征匹配

    之前我们已经介绍了SIFT算法,以及SURF算法,但是由于计算速度较慢的原因.人们提出了使用ORB来替代SIFT和SURF.与前两者相比,ORB有更快的速度.ORB在2011年才首次发布.在前面小节中 ...

  5. 第四百一十六节,Tensorflow简介与安装

    第四百一十六节,Tensorflow简介与安装 TensorFlow是什么 Tensorflow是一个Google开发的第二代机器学习系统,克服了第一代系统DistBelief仅能开发神经网络算法.难 ...

  6. 第三百八十六节,Django+Xadmin打造上线标准的在线教育平台—HTML母版继承

    第三百八十六节,Django+Xadmin打造上线标准的在线教育平台—HTML母版继承 母板-子板-母板继承 母板继承就是访问的页面继承一个母板,将访问页面的内容引入到母板里指定的地方,组合成一个新页 ...

  7. 第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表、课程评论表、用户收藏表、用户消息表、用户学习表

    第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表.课程评论表.用户收藏表.用户消息表.用户学习表 创建名称为ap ...

  8. 第三百六十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的bool组合查询

    第三百六十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的bool组合查询 bool查询说明 filter:[],字段的过滤,不参与打分must:[] ...

  9. 第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点

    第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点 1.分布式爬虫原理 2.分布式爬虫优点 3.分布式爬虫需要解决的问题

  10. 第三百四十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—Requests请求和Response响应介绍

    第三百四十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—Requests请求和Response响应介绍 Requests请求 Requests请求就是我们在爬虫文件写的Requests() ...

随机推荐

  1. GIL:全局解释器锁 VS 用户程序锁

    既然有了GIL锁,CPython还要多线程干什么? ''' GIL:全局解释器锁的来历 四核:同一时刻真正有四个任务在运行,多核的意义在于此 单核:看上去是并发的,因为进行了上下文切换,单核永远是串行 ...

  2. ideal中项目resources下txt文件读取不到的问题。

    这次做项目,原来用到了一个txt文件,在ideal中项目启动后报读取不到txt文件.项目原来是在eclipse中的. 在网上找了些文章,发现ideal中要读取到resources下的文件需要加上下面红 ...

  3. 数据库訪问技术之JDBC

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhuojiajin/article/details/32150883     在了解JDBC之前呢, ...

  4. redis 初步认识四(redis锁,防并发)

    using System; namespace ConsoleAppRedis { class Program { static void Main(string[] args) { //第一种,无登 ...

  5. 读书笔记---<<图解HTTP>>(一)

    一.了解Web及网络基础 1. 网络基础TCP/IP 通常使用的网络包括互联网都是在TCP/IP协议族的基础上运作的,而HTTP属于它内部的一个子集. 1.1 TCP/IP协议族 像这样吧与互联网关联 ...

  6. 六招轻松搞定你的CentOS系统安全加固

    Redhat是目前企业中用的最多的一类Linux,而目前针对Redhat攻击的黑客也越来越多了.我们要如何为这类服务器做好安全加固工作呢?  一.  账户安全 1.1 锁定系统中多余的自建帐号 检查方 ...

  7. Python如何将整数转化成二进制字符串

    Python 如何将整数转化成二进制字符串 1.你可以自己写函数采用 %2 的方式来算. >>> binary = lambda n: '' if n==0 else binary( ...

  8. Lodop简短问答客户反馈篇 及排查步骤 及注册相关

    A.http下打印图片正常,https下打印图片是××.(有的客户端可以,有的不可以)重置ie浏览器试试.客户反馈:(和ie浏览器的设置有关)intenet选项--高级里,我调整为和能打印出图片的电脑 ...

  9. Java BitSet使用场景和示例

    一.什么是BitSet? 注:以下内容来自JDK API: BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个boolean值.用非负的整数将BitSet的位编入索引.可以对每个编 ...

  10. Centos7 配置和链接FTP

    1:安装vsftpd组建:  yum -y install vsftpd  安装完成以后在目录/etc/vsftpd/vsftpd.conf文件是vsftp的配置文件 2:添加一个专门用来登陆vsft ...