原文: http://damieng.com/blog/2013/12/09/probable-c-6-0-features-illustrated

===========================================

1. 主构造函数

以更简短的方式写一个构造函数给私有变量赋值.

从前

public class Point {
private int x, y; public Point(int x, int y)
this.x = x;
this.y = y;
}
}

现在

public class Point(int x, int y) {
private int x, y;
}

Thoughts

  • Do you need to independently define x and y?
  • Can you still write a body?
  • How would you make the default private?

This solution feels too constrained, would have preferred something like:

public Point(set int x, set int y)

That set the property and optionally created a private one if it didn’t. Would allow bodies, use on multiple constructors etc.

2. 自动属性赋值

之前

private readonly int x;
public int X { get { return x; } }

现在

public int X { get; } = x;  
public int XX { get; set; } = xx;  

3. using 静态类 引入一个类的所有的公共静态方法;

引入一个类的所有的公共静态方法 .

之前

public double A { get { return Math.Sqrt(Math.Round(5.142)); } }

现在

using System.Math;
...
public double A { get { return Sqrt(Round(5.142)); } }

4. 属性表达式

之前

public double Distance {
get { return Math.Sqrt((X * X) + (Y * Y)); }
}

现在

public double Distance => Math.Sqrt((X * X) + (Y * Y));

思考

  • 尽管使用了 => 其实和System.Linq.Expression无关.

5. 方法表达式

之前

public Point Move(int dx, int dy) {
return new Point(X + dx1, Y + dy1);
}

现在

public Point Move(int dx, int dy) => new Point(X + dx, Y + dy);

6. Params 参数 支持的类型更多了

之前pararms只支持Array.

之前

Do(someEnum.ToArray());
...
public void Do(params int[] values) { ... }

现在

Do(someEnum);
public void Do(params IEnumerable<Point> points) { ... }

7. null 检查

之前

if (points != null) {
var next = points.FirstOrDefault();
if (next != null && next.X != null) return next.X;
}
return -1;

现在

var bestValue = points?.FirstOrDefault()?.X ?? -1;
int? first = customers?[0].Orders?.Count()

8. Constructor type parameter inference

Removes the need to create static factory methods to infer generic types. This is helpful with Tuples etc.

Before

var x = MyClass.Create(1, "X");
...
public MyClass<T1, T2> Create<T1, T2>(T1 a, T2 b) {
return new MyClass<T1, T2>(a, b);
}

After

var x = new MyClass(1, "X");

Thoughts

  • Another great addition.
  • Does it understand list and collection initializers to automatically determine the generic types too?

9. 就地声明输出参数

之前

int x;
int.TryParse("123", out x);

现在

int.TryParse("123", out int x);

10. 更优雅的string.Format

之前

var s = string.Format("{0} is {1} years{{s}} old", p.Name, p.Age);

现在

var s = "\{p.Name} is \{p.Age} year{s} old";
var s = "\{p.Name, 20} is \{p.Age:D3} year{s} old";
var s = "\{p.Name} is \{p.Age} year\{(p.Age == 1 ? "" : "s")} old";
var s = $"{p.Name} is {p.Age:D3} year{{s}} old";

11. 可以在catch finally 中使用 await

12. 字典的index Initializers

之前

var result = new Dictionary<string, string>()
{
  {"index1", "value1"},
  {"index2", "value2"}
};

现在

var result = new Dictionary<string, string>()
{
  ["index1"] = "value1",
  ["index2"] = "value2"
};
 

[译]Probable C# 6.0 features illustrated的更多相关文章

  1. IIS 7.0 Features and Vista Editions

    原文 IIS 7.0 Features and Vista Editions Overview of IIS 7.0 differences Across Windows Vista Editions ...

  2. [译]AngularJS 1.3.0 开发者指南(一) -- 介绍

    [译]AngularJS 1.3.0 开发者指南(一) -- 介绍 Angular是什么 ? AngularJS是一款针对动态web应用的结构框架. 它可以让像使用模板语言使用HTML, 并且可以扩展 ...

  3. [译]AngularJS 1.3.0 开发者指南(一) -- 介绍 (转)

    http://www.cnblogs.com/lzj0616/p/6440563.html [译]AngularJS 1.3.0 开发者指南(一) -- 介绍 Angular是什么 ? Angular ...

  4. C# 6.0 Features , C# 7.0 Features

    1 1 1 C# 6.0 Features http://stackoverflow.com/documentation/c%23/24/c-sharp-6-0-features#t=20160828 ...

  5. 【译】Android 6.0 Changes (机翻加轻微人工校对)

    Android 6.0 Changes In this document Runtime Permissions Doze and App Standby Apache HTTP Client Rem ...

  6. 【译】Selenium 2.0 WebDriver

    Selenium WebDriver   注意:我们正致力于完善帮助指南的每一个章节,虽然这个章节仍然存在需要完善的地方,不过我们坚信当前你看到的帮助信息是精确无误的,后续我们会提供更多的指导信息来完 ...

  7. 【译】Flink + Kafka 0.11端到端精确一次处理语义的实现

    本文是翻译作品,作者是Piotr Nowojski和Michael Winters.前者是该方案的实现者. 原文地址是https://data-artisans.com/blog/end-to-end ...

  8. (译)MySQL 8.0实验室---MySQL中的倒序索引(Descending Indexes)

    译者注:MySQL 8.0之前,不管是否指定索引建的排序方式,都会忽略创建索引时候指定的排序方式(语法上不会报错),最终都会创建为ASC方式的索引,在执行查询的时候,只存在forwarded(正向)方 ...

  9. [译]初试C# 8.0

    原文地址: https://blogs.msdn.microsoft.com/dotnet/2018/12/05/take-c-8-0-for-a-spin/ 初试C# 8.0 昨天我们宣布了Visu ...

随机推荐

  1. C++开发的基于UDP协议的聊天工具

    项目相关地址 源码:https://github.com/easonjim/UDPChat bug提交:https://github.com/easonjim/UDPChat/issues

  2. Linux VFS Extended Attribute And Access Control Table

    catalog . 简介 . 扩展属性 . 访问控制表 . 小结 0. 简介 许多文件系统都提供了一些特性,扩展了VFS层提供的标准功能,虚拟文件系统不可能为所有特性都提供具体的数据结构.超出标准的U ...

  3. linux下制作win7安装盘(mint、ubuntu、debian)

    今天替同事装系统.因为现在的debian系系统都可以直接用dd拷贝iso到u盘的方法进行安装,所以,想当然的用dd来制作windows安装盘.没反应!所以有了下面的方法. 1. 将u盘格式化为ntfs ...

  4. ubantu安装sogou输入法

    Ubuntu的搜狗输入法安装步骤   1 本来想先移除ibus,但是在之后发现如果直接使用下面的命令 sudo apt-get remove ibus 移除ibus将导致系统某些地方不正常的问题,例如 ...

  5. TcpClient类与TcpListener类

    TcpClient类 //构造方法1 TcpClient t = new TcpClient(); t.Connect(); //构造方法2 IPEndPoint iep = ); TcpClient ...

  6. 一文彻底了解join的各种用法

    表a                       表b    a1    a2                 b1     b2 a01     张三         a02     数学 a02 ...

  7. WPF:父窗口与子窗口的层次关系

    关于子窗体的层级关系总结一下哈,希望能对大家有些帮助 假设有这样两个窗体:RootWindow,SubWindow,在RootWindow中引发某事件而显示SubWindow 1,如果弹出窗体(比如S ...

  8. elasticsearch api

    count curl -XGET http://21.3.5.121:9200/ipv4geo/service/_count -d '{"query":{"match&q ...

  9. Ajax异步刷新,测试用户名是否被注册

    <body> <form name="form_register"> <input type="> <input type=&q ...

  10. win7或win2008 R2 被远程登录日志记录 系统日志

    事件查看器 → Windows 日志 → 安全 (win7 事件查看器 打开方式 :计算机 右键   → 管理  → 计算机管理 → 系统工具 → 事件查看器 windows server 2008 ...