[干货来袭]C#6.0新特性

微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化..

分享一下也是昨天发布的新的C#6.0的部分新特性吧...

当然..我也没用过 - -,主要是参考国外某位的一篇文章..很详细,英文好的可以自行去看

https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6

首先

自动属性初始化增强

public class Customer
{
    public string First { get; set; } = "Jane";
    public string Last { get; set; } = "Doe";
}
public class Customer
{
    public string First { get; } = "Jane";
    public string Last { get; } = "Doe";
}
public class Customer
{
   //只读的属性  
    public string Name { get; };
    //在初始化方法中赋值,可行~
    public Customer(string first, string last)
    {
        Name = first + " " + last;
    }
}

在C#5.0中是不可行的 如下图:

方法函数支持lambda写法 如下:

public void Print() => Console.WriteLine(First + " " + Last);

支持直接导入命名空间一样导入静态类,而不用在代码中使用静态类名 如下:

//静态导入Console
using static System.Console;
using static System.Math;
using static System.DayOfWeek;
class Program
{
    static void Main()
    {
        //直接使用方法而不用Console.WriteLine
        WriteLine(Sqrt(3*3 + 4*4)); 
        WriteLine(Friday - Monday); 
    }
}

扩展方法,(这个不是很懂,解释不好请原谅)

在Main类中静态的导入你要扩展的类型,然后写你需要扩展的方法..?.. - -,不懂..

using static System.Linq.Enumerable; // The type, not the namespace
class Program
{
    static void Main()
    {
        var range = Range(5, 17);                // Ok: not extension
        var odd = Where(range, i => i % 2 == 1); // Error, not in scope
        var even = range.Where(i => i % 2 == 0); // Ok
    }
}

非空的语法糖如下:

int? first = customers?[0].Orders.Count();
//上面的写法等同于下面
int? first = (customers != null) ? customers[0].Orders.Count() : null;

字符串格式化新玩法:

//原来的,我们需要这样..
var s = String.Format("{0} is {1} year{{s}} old", p.Name, p.Age);

//C#6.0中,直接如下:
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 numbers = new Dictionary<int, string> {
    [7] = "seven",
    [9] = "nine",
    [13] = "thirteen"
};

异常过滤器:

如果When中用括号括起来的表达式计算结果为true,catch块中运行,否则异常持续。

( - -,然而我也并没有搞懂..求大神解释..)

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

可异步等待的Catch块:

Resource res = null;
try
{
    res = await Resource.OpenAsync(…);       // You could do this.
    …
} 
catch(ResourceException e)
{
    await Resource.LogAsync(res, e);         // Now you can do this …
}
finally
{
    if (res != null) await res.CloseAsync(); // … and this.
}

基本到此就结束了, - -,水平有限.不好与不完善的地方请指出..免得误导大家..

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

c#:使用using关键字自动释放资源未必一定就会有明显好处

记录这篇文章的灵感来源来自今天下班前与同事的小小争论,我现在开发的一个项目中,有这样一段代码: public string ToXML() { ...

22980
来自专栏.NET后端开发

ADO.NET入门教程(七) 谈谈Command对象高级应用

摘要 在上一篇文章《你必须知道的ADO.NET(六) 谈谈Command对象与数据检索》中,我详细讲解了Command对象的基础知识以及基本用法。作为ADO.N...

54190
来自专栏跟着阿笨一起玩NET

浅谈WebService开发(一)

       简单通俗来说,就是企业之间、网站之间通过Internet来访问并使用在线服务,一些数据,由于安全性问题,不能提供数据库给其他单位使用,这时候可以使...

42430
来自专栏我和未来有约会

向silverlight传递自定义参数

在silverlight往往还是有一些获取不到的东西,比如说客户机的ip等的数据.可以通过初始化sl时把参数传入sl中. 1.修改page类 public P...

20290
来自专栏菩提树下的杨过

jQuery调用RESTful WCF示例(GET方法/POST方法)

不废话了,直奔主题吧 wcf端: 近几年比较流行restful,为了能让ajax调用,同时也为了支持restful风格的uri,在创建一个Ajax-enable...

33480
来自专栏hbbliyong

Json的序列化与反序列化以及乱入的k_BackingField

  今天需要使用Json数据,所以用到了Json的序列化与反序列化。首先先来说怎么序列化的: 1.序列化与反序列化   首先添加System.Runtime.S...

26750
来自专栏Kiba518

C#线程安全使用(四)

这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来。

9730
来自专栏hbbliyong

C#基础知识回顾-- 反射(4)

从程序集获得类型   先说点题外话,现在技术真的发展太快了。我这边还很多东西半生不熟 呢,那边又出现了好多有趣的新东西让你眼红不已。学还是不学这还真是 个问题。...

29460
来自专栏tkokof 的技术,小趣及杂念

Sweet Snippet 系列之 有序列表

很朴素的一种想法,为了维持 List 有序,我们可以在 Add 操作之后进行 Sort 操作(Remove 操作后不需要重新 Sort):

5510
来自专栏大内老A

我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承

当今的IT领域,SOA已经成为了一个非常时髦的词,对SOA风靡的程度已经让很多人对SOA,对面向服务产生误解。其中很大一部分人甚至认为面向服务将是面向对象的终结...

20150

扫码关注云+社区

领取腾讯云代金券