由于项目升级到了.NetFramework 4.6.1,开发工具转向了vs2015,趁机尝试下C#6.0.结果在网上搜的一些教程总结的不是太完整,有的代码随着vs正式版的发布也有所修改.那些个教程也没更新.
所以把自己学习到的记录一下.

1.自动属性初始化(Auto-property initializers)

    public class Account{public string Name { get; set; } = "summit";public int Age { get; set; } = 22;public IList<int> AgeList{get;set;} = new List<int> { 10,20,30,40,50 };}

对于只读属性也可以这样直接初始化(C#5.0不支持),也可以直接在构造函数里初始化

public class Customer
{public string Name { get; }public Customer(string first, string last){Name = first + " " + last;}
}

2.字符串嵌入值(String interpolation)

在之前版本的String.Format中有多少个参数就要写多少个占位符还必须按照顺序,否则就报错.参数一多,这样搞的话确实头疼.新版本中在字符串前用$来标识后边的字符可以使用{对象}来作为占位符.看个例子.

Console.WriteLine($"年龄:{account.Age}  生日:{account.BirthDay.ToString("yyyy-MM-dd")}");
Console.WriteLine($"年龄:{account.Age}");
Console.WriteLine($"{(account.Age<=22?"小鲜肉":"老鲜肉")}");

如果想输出{或}符号,写两个即可,如$"{{".
注意这个$符号,网上的N多教程都是没有这个东东的.是直接"\{ account.Age \}",这种方式在新版本里已经被抛弃了.

3.导入静态类(Using Static)

像之前使用Math这个静态类的时候要先导入System命名空间后才能使用它.现在可以直接导入这个静态,然后代码中直接使用其函数.

using static System.Math;//注意这里不是命名空间哦Console.WriteLine($"之前的使用方式: {Math.Pow(4, 2)}");
Console.WriteLine($"导入后可直接使用方法: {Pow(4,2)}");

注意这里是using static ...
如果某个命名空间下有n个方法,用这种方式直接引入单个静态类而不用引用所有方法还是挺方便的.

4.空值运算符(Null-conditional operators)

之前写过无数个这样的判断代码

if (*** != null)
{//不为null的操作
}
return null;

现在使用可以简化这样方式.

var age = account.AgeList?[0].ToString();Console.WriteLine("{0}", (person.list?.Count ?? 0));

如果account.AgeList为空则整个表达式返回空,否则后边的表达式的值.

5.对象初始化器(Index Initializers)

这种方式可以给字典或其他对象通过索引赋值初始化.

IDictionary<int, string> dict = new Dictionary<int, string>() {[1]="first",[2]="second"
};
foreach(var dic in dict)
{Console.WriteLine($"key: {dic.Key} value:{dic.Value}");
}output:
key: 1 value:first
key: 2 value:second

6.异常过滤器(Exception filters)

private static bool Log(Exception e)
{Console.WriteLine("log");return true;
}
static void TestExceptionFilter()
{try{Int32.Parse("s");}catch (Exception e) when (Log(e)){Console.WriteLine("catch");return;}
}当when()里面返回的值不为true,将持续抛出异常,不会执行catch里面的方法.

7.nameof表达式 (nameof expressions)

在对方法参数进行检查时经常这样写:
private static void Add(Account account)
{if (account == null)throw new ArgumentNullException("account");
}如果某天参数的名字被修改了,下面的字符串很容易漏掉忘记修改.
使用nameof表达式后,编译的时候编译器将检查到有修改后自动导航与重构(-_-! 不知道翻译的对不对)
private static void Add(Account account)
{if (account == null)throw new ArgumentNullException(nameof(account));
}

8.在cath和finally语句块里使用await(Await in catch and finally blocks)

c#5.0里是不支持这么写.Resource res = null;
try
{res = await Resource.OpenAsync(…);       // You could do this.…
}
catch(ResourceException e)
{await Resource.LogAsync(res, e);         // Now you can do this …
}
finally
{if (res != null) await res.CloseAsync(); // … and this.
}

9.在属性里使用Lambda表达式(Expression bodies on property-like function members)

public string Name =>string.Format("姓名: {0}", "summit");public void Print() => Console.WriteLine(Name);

10.在方法成员上使用Lambda表达式

static int LambdaFunc(int x, int y) => x*y;public void Print() => Console.WriteLine(First + " " + Last);

关于C#6.0新增加的语言特性目前为止也就这么多.没有什么新功能,更多的是语法糖的改进.开发更舒服更快速. 
最后附上github上关于c#6.0的相关介绍链接:点我点我

  

转载于:https://www.cnblogs.com/summit7ca/p/5319647.html

C#6.0新特性的尝试相关推荐

  1. mysql8.0创建属性,MySQL 8.0新特性 — 管理端口的使用简介

    前言 下面这个报错,相信大多数童鞋都遇见过:那么碰到这个问题,我们应该怎么办呢?在MySQL 5.7及之前版本,出现"too many connection"报错,超级用户root ...

  2. Redis 6.0 新特性 ACL 介绍

    Redis 6.0 新特性 ACL 介绍 Intro 在 Redis 6.0 中引入了 ACL(Access Control List) 的支持,在此前的版本中 Redis 中是没有用户的概念的,其实 ...

  3. [翻译] C# 8.0 新特性

    原文: Building C# 8.0 [译注:原文主标题如此,但内容大部分为新特性介绍,所以意译标题为 "C# 8.0 新特性"] C# 的下一个主要版本是 8.0.我们已经为它 ...

  4. hadoop3.0新特性介绍

    hadoop3.0新特性介绍 1. 基于jdk1.8(最低版本要求) 2. mr采用基于内存的计算,提升性能(快spark 10倍) 3. hdfs 通过最近black块计算,加快数据获取速度(块大小 ...

  5. Android5.0,6.0,7.0,8.0新特性整理

    背景 Android5.0(Android Lollipop)是谷歌公司2014年10月发布的全新安卓系统,至今已经两年多.然而由于国产手机对安卓ROM的深度定制或修改,以及手机厂商.芯片制造商.运营 ...

  6. Android6.0新特性

    1.大量漂亮流畅的动画 安卓6.0系统增加了大量漂亮的过度动画,可以从视觉上减少卡顿感,给用户带来流畅的体验.说到过渡动画,以前可是苹果手机的拿手好戏,现在安卓大有赶超iOS的趋势. 2.相机新增专业 ...

  7. Android 4.0新特性(中文)

    Android 4.0新特性(中文) 转自http://www.eoeandroid.com/thread-103300-1-1.html android4.0 SDK发布有一段时间了,在eoe上找到 ...

  8. Android5.0,6.0,7.0新特性整理

    背景 Android5.0(Android Lollipop)是谷歌公司2014年10月发布的全新安卓系统,至今已经两年多.然而由于国产手机对安卓ROM的深度定制或修改,以及手机厂商.芯片制造商.运营 ...

  9. Android5.0 6.0 7.0新特性

    原文链接:http://blog.csdn.net/haovip123/article/details/54618642 背景 Android5.0(Android Lollipop)是谷歌公司201 ...

  10. mysql3819错误,MySQL 8.0新特性 ― 检查性约束的使用简介

    前言 在MySQL 8.0版本中,引入了一个非常有用的新特性 ― 检查性约束,它可以提高对非法或不合理数据写入的控制能力:接下来我们就来详细了解一下. 检查性约束 创建.删除与查看 (1)可以在建表时 ...

最新文章

  1. TCP三次握手与四次断开
  2. 粒子群算法tsp java_粒子群算法解决TSP问题汇总.doc
  3. FormView用法
  4. LeetCode-3. 无重复字符的最长子串
  5. 结构化数据传输协议xml、json、protobuf比较
  6. *第七周*数据结构实践项目三【负数把整数赶出队列】
  7. Trained Tesseract on 瘦金体 successfully!!
  8. 周日历插件weeklyCalendar,可添加日历提醒
  9. 如何注册PayPal账户
  10. 二项式展开 matlab,二项式造句_造句大全
  11. Mybatis Generator配置文件
  12. Visual Paradigm简单教程(2):绘制序列图
  13. 地理信息系统矢量数据的组织形式 第一章:二维空间对象数据模型
  14. java龙世界禁忌之恋灵魂大殿_《龙世界-禁忌之恋》完美图文攻略
  15. Twitter Storm: DRPC学习
  16. Commander入门
  17. 我们不再是冷暖自知的个体
  18. 实践是检验真理的唯一标准2 - 脱壳篇03
  19. 哈佛的学生都在看这种视频,每天15分钟,英语水平暴增!
  20. 名悦集团:新能源汽车保养做好这三步,用车无忧

热门文章

  1. 51单片机汇编_1_内外存储器转移数据
  2. 有用的网页链接的整合(不定时更新)
  3. 【基础】深度学习最常用的10个激活函数!(数学原理+优缺点)
  4. tensorflow - model.predict
  5. 安装tensorflow-gpu 遇到的问题及收获
  6. Java面试必备知识点梳理:二分查找算法
  7. Router OS 全攻略
  8. Tensorflow2.5安装
  9. 用最通俗易懂的语言告诉你什么是信息熵
  10. Scipy教程 - 距离计算库scipy.spatial.distance