C# 6新特性简单总结
最近在看《C#高级编程 C# 6&.NET Core 1.0》,会做一些读书笔记,也算对知识的总结与沉淀了。
1.静态的using声明
静态的using声明允许调用静态方法时不使用类名:
// C# 5
using System; Console.WriteLine("C# 5"); // C# 6
using static System.Console; WriteLine("C# 6");
2.表达式体方法
表达式体方法只包含一个可以用Lambda语法编写的语句:
// C# 5
public bool IsSquare(Rectangle rect)
{
return rect.Width == rect.Height;
} // C# 6
public bool IsSquare(Rectangle rect) => rect.Width == rect.Height;
3.表达式体属性
与表达式体方法类似,只有get存储器的单行属性可以用Lambda语法编写:
// C# 5
public string FullName
{
get
{
return FirstName + " " + LastName;
}
} // C# 6
public string FullName => FirstName + " " + LastName;
4.自动实现的属性初始化器
自动实现的属性可以用属性初始化器来初始化:
// C# 5
public class Person
{
public Person()
{
Age = ;
}
public int Age { get; set; }
} // C# 6
public class Person
{
public int Age { get; set; } = ;
}
5.只读的自动属性
// C# 5
private readonly int _bookId;
public BookId
{
get
{
return _bookId;
}
} // C# 6
private readonly int _bookId;
public BookId { get; }
6.nameof运算符
使用新的nameof运算符,可以访问字段名、属性名、方法名和类型名。这样,在重构时就不会遗漏名称的改变:
// C# 5
public void Method(object o)
{
if(o == null)
{
throw new ArgumentNullException("o");
}
} // C# 6
public void Method(object o)
{
if(o == null)
{
throw new ArgumentNullException(nameof(o));
}
}
7.空值传播运算符
空值传播运算符简化了空值的检查:
// C# 5
int? age = p == null ? null : p.Age; // C# 6
int? age = p?.Age;
8.字符串插值
字符串插值删除了对string.Format的调用,它不在字符串中使用编号的格式占位符,占位符可以包含表达式:
// C# 5
public override string ToString()
{
return string.Format("{0},{1}", Title, Publisher);
} // C# 6
public override string ToString() => $"{Title}{Publisher}";
9.字典初始化
// C# 5
var dic = new Dictionary<int, string>();
dic.Add(, "three");
dic.Add(, "seven"); // C# 6
var dic = new Dictionary<int, string>()
{
[] = "three",
[] = "seven"
};
10.异常过滤器
异常过滤器允许在捕获异常之前过滤它们:
// C# 5
try
{
//
}
catch (MyException ex)
{
if (ex.ErrorCode != ) throw;
} // C# 6
try
{
//
}
catch (MyException ex) when (ex.ErrorCode == )
{
//
}
11.catch中的await
await现在可以在catch子句中使用,C# 5需要一种变通方法:
// C# 5
bool hasError = false;
string errorMsg = null;
try
{
//
}
catch (MyException ex)
{
hasError = true;
errorMsg = ex.Message;
}
if (hasError)
{
await new MessageDialog().ShowAsync(errorMsg);
} // C# 6
try
{
//
}
catch (MyException ex)
{
await new MessageDialog().ShowAsync(ex.Message);
}
C# 6新特性简单总结的更多相关文章
- JAVA8新特性简单总结
速度更快代码更少强大的StreamAPI便于并行最大化的减少空指针异常Lambda表达式<具体做什么事>和函数式接口Lambda表达式(也叫做闭包)它允许我们将一个函数当作方法的参数(传递 ...
- PHP 7的一些引人注目的新特性简单介绍
1. ?? 运算符(NULL 合并运算符)把这个放在第一个说是因为我觉得它很有用.用法: ? 1 $a = $_GET['a'] ?? 1; 它相当于: ? 1 2 <?php $a = iss ...
- Yii2版本号新特性简单介绍
Yii2 Beta版本号在今年4月份公布.眼下正在改动问题和完好文档中. Yii2要求PHP版本号不低于5.4,主要有例如以下改进: 1)支持PHP框架间协作组制定的PSR-4标准,这简化了文件夹并提 ...
- CSS3新特性简单总结(持续补充常用到的情景)
1.CSS3边框border-radius 左上右下box-shadow box-shadow: 水平阴影(可负值,必) 垂直阴影(可负值,必) 模糊距离 阴影尺寸 颜色颜色 inset(将外部阴影改 ...
- 【转】【C#】C# 5.0 新特性——Async和Await使异步编程更简单
一.引言 在之前的C#基础知识系列文章中只介绍了从C#1.0到C#4.0中主要的特性,然而.NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两 ...
- 简单理解ECMAScript2015中的箭头函数新特性
箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...
- 简单了解JAVA8的新特性
JAVA8新特性会颠覆整个JAVA程序员的编程习惯 甚至如果您坚守JAVA7之前的编程习惯,今后你看比较年轻的程序员写的JAVA代码都会无法理解 所以为了保证不脱钩,我觉得有必要学习JAVA8的新特性 ...
- java--加强之 jdk1.5简单新特性,枚举,注解
转载请申明出处:http://blog.csdn.net/xmxkf/article/details/9944041 Jdk1.51新特性(静态导入,可变参数,加强for循环,自动拆装箱) 08.ja ...
- 转:[你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单
本专题概要: 引言 同步代码存在的问题 传统的异步编程改善程序的响应 C# 5.0 提供的async和await使异步编程更简单 async和await关键字剖析 小结 一.引言 在之前的C#基础知 ...
随机推荐
- Android基础新手教程——4.1.2 Activity初窥门径
Android基础新手教程--4.1.2 Activity初窥门径 标签(空格分隔): Android基础新手教程 本节引言: 上一节中我们对Activity一些主要的概念进行了了解,什么是Activ ...
- MAC下安装Mysql数据库
步骤一:安装 登录官网:mysql数据库下载官网下载合适的版本 下载完成后,在Finder的侧边栏为下载的目录中,找到下载完成的文档. 单击下载文档,单击MySQL-5.6.22-osx10.8-x8 ...
- Centos 7 修改yum源为阿里源
因为官方的yum源在国内访问效果不佳, 需要改为国内比较好的阿里云或者网易的yum源, 具体修改步骤如下: cd /etc/yum.repos.d # 备份旧的配置文件 mv CentOS-Base. ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-人机界面如何让文本框可以输入,文本框可以编辑
选中一个文本框,然后在属性中双击输入配置的OnMouseDown事件(也可以是别的事件,但都是通过这种方法) 在左侧点击写变量,然后输入类型改成VisuDialos.Numpad(数字键盘方式), ...
- Java8 更快的原子类:LongAdder(笔记)
更快的原子类:LongAdder 大家对AtomicInteger的基本实现机制应该比较了解,它们是在一个死循环内,不断尝试修改目标值,知道修改成功,如果竞争不激烈,那么修改成功的概率就很高 ...
- valgrind的callgrind工具进行多线程性能分析
1.http://valgrind.org/downloads/old.html 2.yum install valgrind Valgrind的主要作者Julian Seward刚获得了今年的Goo ...
- 微信团队原创分享:iOS版微信的内存监控系统技术实践
本文来自微信开发团队yangyang的技术分享. 一.前言 FOOM(Foreground Out Of Memory),是指App在前台因消耗内存过多引起系统强杀.对用户而言,表现跟crash一样. ...
- 微信小程序 - 滑动显示地点信息(map)
演示效果如下: 资源如下 marker,png index.wxml <view class="map-container"> <map id="map ...
- TLS
1. SSL简介 SSL(SecureSocket Layer)安全套接层,是网景公司提出的用于保证Server与client之间安全通信的一种协议,该协议位于TCP/IP协议与各应用层协议之间,即S ...
- 转:Window10下RabbitMQ安装图文教程
一.erlang下载安装 1.下载 下载erlang,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,下载地址:http://www.erlang.org/downloads,双 ...