个人原创译文,转载请注明出处。有不对的地方欢迎指出与交流。

英文原文:Professional C# 6 and .NET Core 1.0 - What’s New in C# 6

C# 6 的新功能

新的C #编译器可以编译C # 6 。它不仅已完成代码清理;编译器管道的功能也可以在自定义程序中使用,并且被应用在Visual Studio的许多功能里。

新的编译平台可以增强C #许多新特征.虽然没有类似LINQ或异步特征关键字的影响力,但许多增强的功能确实提高了开发者生产力。C # 6的变化都有哪些?

静态引

静态引用声明允许没有静态方法类名的调用:

C# 5:

using System;
// etc.
Console.WriteLine("Hello,World!");

C# 6

using static System.Console;
// etc.
WriteLine("Hello,World");

using static关键字将会在第2章“Core C #”提到

表达式方法

使用表达式方法时,可以用只包含一个语句的lambda表达式语法:

C# 5

public boolIsSquare(Rectangle rect)
{
return rect.Height == rect.Width;
}

C# 6

public boolIsSquare(Rectangle rect) => rect.Height == rect.Width;

表达式方法将在第3章“对象和类型”中讨论

表达式属性

类似表达式方法,

单行属性只有一个getaccessor ,可以用lambda语法编写:

In C# 5

public string FullName
{
get
{
return FirstName +"" + LastName;
}
}

In C# 6

public string FullName=> FirstName +"" + LastName;

表达式属性将在第3章讨论.

自动实现的属性预设器

自动实现的属性可以通过属性预设器进行初始化:

In C# 5

public class Person
{
public Person()
{
Age = ;
}
public int Age {get; set;}
}

In C# 6

public class Person
{
public int Age {get; set;} = ;
}

自动初始化的属性预设器将在第3章讨论。

只读自动属性

实现只读属性,C # 5中要求完整的属性语法。但在C # 6,您可以使用自动实现的属性:

C# 5

private readonly int_bookId;
public BookId
{
get
{
return _bookId;
}
}

C# 6

public BookId {get;}

只读自动属性将在第3章讨论。

nameof 运算符

利用新的nameof 运算符,字段名称、属性、方法或类型均可被访问。这样,重命名也不会错过名称更改:

C# 5

public void Method(objecto)
{
if (o == null) throw newArgumentNullException("o");

C# 6

public void Method(objecto)
{
if (o == null) throw newArgumentNullException(nameof(o));

nameof 运算符将在第 8章 “Operators and Casts.”中讨论。

空指针传递运算符

null 空指针传递运算符可以简化空指针检查:

C# 5

int? age = p == null ?null : p.Age;

C# 6

int? age = p?.Age;

新的语法在触发事件中也有优势:

在 C# 5

var handler = Event;
if (handler != null)
{
handler(source, e);
}

 C# 6

handler?.Invoke(source,e);

空指针传递运算符将在第8章中讨论。

字符串插值

字符串插值消除调用string.Format。占位参数可以包含在表达式中则不必在string里利用数字占位进行格式化:

在 C# 5

public override ToString()
{
return string.Format("{0}, {1}",Title, Publisher);
}

 C# 6

public override ToString()=> $"{Title} {Publisher}";

与C # 5语法相比,以上C # 6的示例简化了很多,因为它不仅使用字符串插值,使用了表达式方法。

字符串插值也可以使用字符串格式,并在分配可格式化的字符串时有特殊的功能。

字符串插值将在第10章“字符串和正则表达式”讨论

字典初始化程序

字典可以使用一个类似集合预设器的字典预设器进行初始化。

在 C# 5

var dict = newDictionary<int, string>();
dict.Add(,"three");
dict.Add(,"seven");

在C# 6

var dict = newDictionary<int, string>()
{
[] ="three",
[] ="seven"
};

字典预设器将在第11章提 “集合”中讨论。

异常过滤器

异常筛选器允许在捕获异常之前对其进行过滤。

在C# 5

try
{
//etc.
}
catch (MyException ex)
{
if (ex.ErrorCode != ) throw;
// etc.
}

In C# 6

try
{
//etc.
}
catch (MyException ex)when (ex.ErrorCode == )
{
// etc.
}

新语法的一大优点不仅在于它减少了代码长度,同时堆栈跟踪没有改变可改变的,这在C # 5中可能发生变化。

异常过滤器在第14章“错误和异常”讨论。

等待捕捉

可以在catch子句中使用关键字await。而在C # 5需要在外层的代码块中才能使用。

在 C# 5

bool hasError = false;
string errorMessage =null;
try
{
//etc.
}
catch (MyException ex)
{
hasError = true;
errorMessage = ex.Message;
}
if (hasError)
{
await newMessageDialog().ShowAsync(errorMessage);
}

 C# 6

try
{
//etc.
}
catch (MyException ex)
{
await newMessageDialog().ShowAsync(ex.Message);
}

此功能不需要增强C #语法;它目前是可用的。这种增强需要微软大量的投资来使它的工作,但与你使用这个平台没有关系。从两个版本的对比可以看出对于开发者来说,代码会越来越少。

 请注意新的C # 6语言功能都包含在上述提到的章节,但本书所有章节都会使用新的C #语法。

C# 6 与 .NET Core 1.0 高级编程 - C# 6 的新功能的更多相关文章

  1. C# 6 与 .NET Core 1.0 高级编程 - 37 章 ADO.NET

    译文,个人原创,转载请注明出处,有不对的地方欢迎指出与交流. 英文原文:Professional C# 6 and .NET Core 1.0 - 37 ADO.NET --------------- ...

  2. C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...

  3. C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...

  4. C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)),不对的地方欢迎指出与交流. 章节出自<Professional C ...

  5. C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(下)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(下)),不对的地方欢迎指出与交流. 章节出自<Professional C ...

  6. C# 6 与 .NET Core 1.0 高级编程 - 40 ASP.NET Core(上)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 40 章  ASP.NET Core(上)),不对的地方欢迎指出与交流. 章节出自<Professiona ...

  7. C# 6 与 .NET Core 1.0 高级编程 - 40 ASP.NET Core(下)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 40 章  ASP.NET Core(下)),不对的地方欢迎指出与交流. 章节出自<Professiona ...

  8. C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(上)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...

  9. C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...

随机推荐

  1. CodeForces - 321E:Ciel and Gondolas (四边形不等式优化DP)

    题意:N个人排成一行,分成K组,要求每组的不和谐值之和最小. 思路:开始以为是斜率优化DP,但是每个区间的值其实已经知道了,即是没有和下标有关的未知数了,所以没必要用斜率. 四边形优化. dp[i][ ...

  2. hiho1602本质不同的回文子串的数量

    给定一个字符串S,请统计S的所有子串中,有多少个本质不同的回文字符串? 注意如果两个位置不同的子串满足长度相同且对应字符也都相同,则认为这两个子串本质上是相同的. Input 一个只包含小写字母的字符 ...

  3. 每次都要重新编译?太慢!让跨平台的 MSBuild/dotnet build 的 Target 支持差量编译

    如果你干预到了项目的编译过程,可能就需要考虑到差量编译了.不然--当你的项目大起来的时候,就会感受到每次都重新编译时,每次重复调试的过程都要进行漫长等待时的绝望和无奈. 如果你正遭遇差量编译失效,每次 ...

  4. elixir 使用mix umbrella 模块化项目

    备注: 项目比较大, 模块比较多,一般使用mix 的方式是大家进行文件夹的划分,但是使用mix 的umbrella 可能会更方便 1. 安装 默认安装elixir 的时候已经包含了这个功能 2. 基本 ...

  5. 7个GIF动图帮你瞬间理解三角函数

    7个GIF动图帮你瞬间理解三角函数 蝌蚪五线谱 百家号04-2120:53 图片来源:IMGUR 三角函数是数学中研究三角形的一个分支,专门阐述三角形的角度和对应边的关系. 有趣的是,定义边角关系的三 ...

  6. c++深拷贝/浅拷贝

    拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化.其唯一的参数(对象的引用)是不可变的(const类型).此函数经常用在函数调用时用户定义类型的值传递及返 ...

  7. 修改 CentOS 中的 repo

    修改 CentOS 中的 repo 原因 由于安装 odoo 10 太慢,因为服务器是国外的. 修改 进入 repo 文件夹 cd /etc/yum.repos.d/ ls 可以看到所有的源.

  8. 空间的搜索与R树

    在现实地图应用中,有个比较常见的问题,比如,你到了一个地方,想查查附近1km内有什么饭店. 这时地图应用就可以马上查询出周围有什么饭店,如果让你设计,你会怎么设计.假设局限在中国的地图上,共有1000 ...

  9. appium+python自动化31-android_uiautomator定位

    前言 appium就是封装android的uiautomator这个框架来的,所以uiautomator的一些定位方法也可以用 text 1.通过text文本定位语法 new UiSelector() ...

  10. JDK之集合乱序源码分析

    在JAVA的JDK中Collections类提供了shuffle方法用来对给定的集合参数进行乱序重排,之前面试也被问到过类似的问题,看了一下JDK的源码实现做个记录 1. 方法签名: Collecti ...