[译]Probable C# 6.0 features illustrated
原文: 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的更多相关文章
- IIS 7.0 Features and Vista Editions
原文 IIS 7.0 Features and Vista Editions Overview of IIS 7.0 differences Across Windows Vista Editions ...
- [译]AngularJS 1.3.0 开发者指南(一) -- 介绍
[译]AngularJS 1.3.0 开发者指南(一) -- 介绍 Angular是什么 ? AngularJS是一款针对动态web应用的结构框架. 它可以让像使用模板语言使用HTML, 并且可以扩展 ...
- [译]AngularJS 1.3.0 开发者指南(一) -- 介绍 (转)
http://www.cnblogs.com/lzj0616/p/6440563.html [译]AngularJS 1.3.0 开发者指南(一) -- 介绍 Angular是什么 ? Angular ...
- 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 ...
- 【译】Android 6.0 Changes (机翻加轻微人工校对)
Android 6.0 Changes In this document Runtime Permissions Doze and App Standby Apache HTTP Client Rem ...
- 【译】Selenium 2.0 WebDriver
Selenium WebDriver 注意:我们正致力于完善帮助指南的每一个章节,虽然这个章节仍然存在需要完善的地方,不过我们坚信当前你看到的帮助信息是精确无误的,后续我们会提供更多的指导信息来完 ...
- 【译】Flink + Kafka 0.11端到端精确一次处理语义的实现
本文是翻译作品,作者是Piotr Nowojski和Michael Winters.前者是该方案的实现者. 原文地址是https://data-artisans.com/blog/end-to-end ...
- (译)MySQL 8.0实验室---MySQL中的倒序索引(Descending Indexes)
译者注:MySQL 8.0之前,不管是否指定索引建的排序方式,都会忽略创建索引时候指定的排序方式(语法上不会报错),最终都会创建为ASC方式的索引,在执行查询的时候,只存在forwarded(正向)方 ...
- [译]初试C# 8.0
原文地址: https://blogs.msdn.microsoft.com/dotnet/2018/12/05/take-c-8-0-for-a-spin/ 初试C# 8.0 昨天我们宣布了Visu ...
随机推荐
- poj1379 模拟退火
题意:和上题一样...就是把最小值换成了最大值.. ref:http://www.cppblog.com/RyanWang/archive/2010/01/21/106112.html #includ ...
- 洛谷P2246 SAC#1 - Hello World(升级版)
题目背景 T1答案要mod1000000007(10^9+7),请重新提交,非常抱歉! 一天,智障的pipapi正在看某辣鸡讲义学程序设计. 题目描述 在讲义的某一面,他看见了一篇文章.这篇文章由英文 ...
- Redis未授权访问漏洞分析
catalog . Redis简介 . 漏洞概述 . 漏洞利用方式 . 修复方式 1. Redis简介 Relevant Link: http://www.cnblogs.com/LittleHann ...
- Linux下使用USB模拟ACM串口设备
这个想法之前就在脑袋里有过,最近公司产品要用到,所以多做了些了解. 1. USB 简介 USB 是 Universal Serial Bus 的缩写,从字面上看,就是通用串行总线的意思.从物理上看,其 ...
- os和sys模块
sys模块 sys模块主要是用于提供对python解释器相关的操作 函数 sys.argv #命令行参数List,第一个元素是程序本身路径 sys.path #返回模块的搜索路径,初始化时使用PYTH ...
- 精通javascript(看书笔记)
变量的类型检查 //检测类型 var str = "Hello World"; if (typeof str=="string") {//使用typeof来判断 ...
- UVA 11419SAM I AM(输出 最小覆盖点 )
参考博客:如何找取 最小覆盖点集合 题意:R*C大小的网格,网格上面放了一些目标.可以再网格外发射子弹,子弹会沿着垂直或者水平方向飞行,并且打掉飞行路径上的所有目标,计算最小多少子弹,各从哪些位置发射 ...
- chown -R命令的使用
chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷贝 ...
- 二维码(QRcode)容量的计算与版本
4.版本信息:即二维码的规格,QR码符号共有40种规格的矩阵(一般为黑白色),从21x21(版本1),到177x177(版本40),每一版本符号比前一版本每边增加4个模块. 177 = 21+(40- ...
- 按照网上方法js删除指定cookie,却怎么也删除不了,解决如下
网上方法: 查找原因说是没有指定Path,记得系统里以前也没指定还是可以的,就查了一下现在的系统Path,猜测是系统Path由以前的/改为/E7-Planning 就改了前端删除方法 测试一下OK了, ...