作为一门专为程(yu)序(fa)员(tang)考虑的语言,感受一下来自微软的满满的恶意...

1. 字符串内联
在之前的版本中,常用的格式化字符串:

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

在 C# 6 中:

//无格式
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";

2. 空条件运算符
在之前的版本中对于 可空类型 或 动态类型 ,获取子元素往往较为复杂:

if(someSchool != null && someSchool.someGrade != null && someSchool.someGrade.someClass != null)
{
return someSchool.someGrade.someClass.someOne;
}

在 C# 6 中,引入了新的运算符:

return someSchool?.someGrade?.someClass?.someOne;
//也可以使用下标运算,例如
//return someArray?[0];

如果 ?. 运算符的左项为 null ,则直接返回 null 。
对于方法或者委托的执行,可以使用 Invoke:

someMethod?.Invoke(args);

3. nameof 表达式
可以直接返回传入变量的名称,而无需复杂的反射。

int someInt;
Console.WriteLine(nameof(someInt)); //"someInt"

注:如果是前面带有命名空间和/或类名,只返回最后的变量名。

4. 索引初始化器
在 C# 6 中简化了对 Dictionary 的初始化方法:

var numbers = new Dictionary<int, string> {
[7] = "seven",
[9] = "nine",
[13] = "thirteen"
};

5. 条件异常处理
在 C# 6 中可以选择性地对某些异常进行处理,无需额外增加判断过程:

try { … }
catch (MyException e) if (myfilter(e))
{

}

6. 属性初始化器
在 C# 6 中可以直接对属性进行初始化:

public class Customer
{
public string First { get; set; } = "Jane";
public string Last { get; set; } = "Doe";
}

以及可以类似定义只读的属性。

7. 成员函数的 lambda 定义
在 C# 6 中可以使用 lambda 表达式来定义成员方法。

public class Point
{
public Point Move(int dx, int dy) => new Point(x + dx, y + dy);
public static Complex operator +(Complex a, Complex b) => a.Add(b);
public static implicit operator string(Person p) => $"{p.First}, {p.Last}";
}

8. 结构体的参数构造函数
在 C# 6 中可以创建结构体的带参数构造函数。

struct Person
{
public string Name { get; }
public int Age { get; }
public Person(string name, int age) { Name = name; Age = age; }
public Person() : this("Jane Doe", 37) { }
}

9. using 静态类
在 C# 6 中 using 除了可以用于命名空间也可以用于静态类。

using System.Console;
using System.Math; class Program
{
static void Main()
{
WriteLine(Sqrt(3*3 + 4*4));
}
}

来自:http://www.zhihu.com/question/27421302

感受C#6.0新语法的更多相关文章

  1. 第十六节:语法总结(3)(C#6.0和C#7.0新语法)

    一. C# 6.0 新语法 1. 自动属性初始化可以赋值 /// <summary> /// 自动属性初始化 /// </summary> public class UserI ...

  2. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

  3. c# 7.0 6.0 新语法

    1.参考地址:https://docs.microsoft.com/zh-cn/dotnet/csharp/tutorials/exploration/csharp-7?tutorial-step=5 ...

  4. Visual Studio 2019 preview中体验C# 8.0新语法

    准备工作: Visual Studio 2019 Preview版本中并没有包含所有的C# 8.0的新功能,但目前也有一些可以试用了.在开始之前,需要进行入两项设置: 将Framework设置为.ne ...

  5. 通过一个例子感受C# 6.0新特性

    微软在Visual Studio 2015中更新C#语言到6.0,添加了很多很好的特性,以使C#语言继续跻身于最优秀语言之行列.下面通过一个例子快速感受一下C# 6.0的新特性,以下程序在VS2015 ...

  6. 使用 C# 9.0 新语法提升 if 语句美感

    C# 语言一贯秉承简洁优美的宗旨,每次升级都会带来一些语法糖,让我们可以使代码变得更简洁.本文分享两个使用 C# 9.0 提升 if 语句美感的技巧示例. 使用属性模式代替 IsNullOrEmpty ...

  7. C#6.0新语法

    .自动属性初始化的改进(有用) 原来的用法(声明时无法同时初始化),例如: class MyClass { public int Age { get; set; } public string Nam ...

  8. C#7.0新语法

    一.out输出参数 在以前使用out输出参数的时候,必须先定义变量,然后才能使用,例如: 先定义一个方法,方法参数是out类型的输出参数: private void DoNoting(out int ...

  9. c# 7.0新语法特性

    public class NewAtturibute { public void TestFunc() { // 01 Out变量 不用初始化 "; if (int.TryParse(inp ...

随机推荐

  1. 总结:Bias(偏差),Error(误差),Variance(方差)及CV(交叉验证)

    犀利的开头 在机器学习中,我们用训练数据集去训练(学习)一个model(模型),通常的做法是定义一个Loss function(误差函数),通过将这个Loss(或者叫error)的最小化过程,来提高模 ...

  2. HDU 5249 离线树状数组求第k大+离散化

    KPI Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  3. HDU1711 KMP(模板题)

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. C语言预处理

    1.由源码到可执行程序的过程(1)源码.c->(编译)->elf可执行程序(2)源码.c->(编译)->目标文件.o->(链接)->elf可执行程序(3)源码.c- ...

  5. sql service (case when then else end ..... group by)

    1. 原表: courseid coursename score ------------------------------------- 1 java 70 2 oracle 90 3 xml 4 ...

  6. 【C++对象模型】第五章 构造、解构、拷贝 语意学

    1.构造语义学 C++的构造函数可能内带大量的隐藏码,因为编译器会扩充每一个构造函数,扩充程度视 class 的继承体系而定.一般而言编译器所做的扩充操作大约如下: 所有虚基类成员构造函数必须被调用, ...

  7. c# “XXX::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。

    症状描述如下: 如果将一个委托作为函数指针从托管代码封送到非托管代码,并且在对该委托进行垃圾回收后对该函数指针发出了一个回调,则将激活 callbackOnCollectedDelegate 托管调试 ...

  8. Item 2---遇到构造器具有多个参数时,要考虑用构建器;Builder模式

    问题,面对这种一个构造器具备多个参数的问题,现有的做法是使用重叠构造器的方式,该方式存在的问题: public class NutritionFacts { private final int ser ...

  9. 【洛谷 P4568】 [JLOI2011]飞行路线 (分层最短路)

    题目链接 分层图最短路. 把每个点拆成\(k+1\)个点,表示总共有\(k+1\)层. 然后每层正常连边, 若\((u,v)\)有边,则把每一层的\(u\)和下一层的\(v\).每一层的\(v\)和下 ...

  10. MSSQL 视图/事务(TRAN[SACTION])/存储过程(PROC[EDURE])/触发器(TRIGGER )

    --视图 视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上 视图在操作上和数据表没有什么区别,但两者的差异是其本质是不同: 数据表是实际存储记录的地方, ...