作者: 乔克斯
查看: 5808|回复: 8
打印 上一主题 下一主题

[其他] 【VS2015新特性】C#6.0新特性介绍

[复制链接]
跳转到指定楼层
楼主
乔克斯 发表于 2015-7-21 10:37:37 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
查看: 5808|回复: 8
说明:
  • 微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化。
  • 分享一下也是昨天发布的新的C#6.0的部分新特性吧。
  • 当然..我也没用过 - -,主要是参考国外某位的一篇文章..很详细,英文好的可以自行去看。
  • https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6

详细介绍:
1.自动属性初始化增强
[C#] 纯文本查看 复制代码
public class Customer
{
    public string First { get; set; } = "Jane";
    public string Last { get; set; } = "Doe";
}

[C#] 纯文本查看 复制代码
public class Customer
{
   //只读的属性  
    public string Name { get; };
    //在初始化方法中赋值,可行~
    public Customer(string first, string last)
    {
        Name = first + " " + last;
    }
}


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


2.方法函数支持lambda写法 如下:
[C#] 纯文本查看 复制代码
public void Print() => Console.WriteLine(First + " " + Last);


3.支持直接导入命名空间一样导入静态类,而不用在代码中使用静态类名 如下:
[C#] 纯文本查看 复制代码
//静态导入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); 
    }
}


4.扩展方法,(这个不是很懂,解释不好请原谅)
在Main类中静态的导入你要扩展的类型,然后写你需要扩展的方法..?.. - -,不懂..
[C#] 纯文本查看 复制代码
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
    }
}


5.非空的语法糖如下:
[C#] 纯文本查看 复制代码
int? first = customers?[0].Orders.Count();
//上面的写法等同于下面
int? first = (customers != null) ? customers[0].Orders.Count() : null;


6.字符串格式化新玩法:
[C#] 纯文本查看 复制代码
//原来的,我们需要这样..
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";


7.索引初始化:
[C#] 纯文本查看 复制代码
var numbers = new Dictionary<int, string> {
    [7] = "seven",
    [9] = "nine",
    [13] = "thirteen"
};


8.异常过滤器:
如果When中用括号括起来的表达式计算结果为true,catch块中运行,否则异常持续。
( - -,然而我也并没有搞懂..求大神解释..)
[C#] 纯文本查看 复制代码
try { … }
catch (MyException e) when (myfilter(e))
{
    …
}


9.可异步等待的Catch块:
[C#] 纯文本查看 复制代码
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.
}


编后语:
基本到此就结束了, - -,水平有限.不好与不完善的地方请指出..免得误导大家..
感谢博客园的博主:顾振印
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 转播转播
回复 论坛版权

使用道具 举报

9#
成信之子 发表于 2015-8-9 12:04:56 | 只看该作者
谢谢分享。。。。。。。。
回复

使用道具 举报

8#
kssbsr 发表于 2015-8-4 18:13:13 | 只看该作者
简化了开发哦 不过目前只考虑c#4.0

[C#] 纯文本查看 复制代码
try { … }
catch (MyException e) when (myfilter(e))    // 当myfilter(e)计算为真时才执行下面的语句
{
    …
}
7#
风影 发表于 2015-7-26 17:18:54 | 只看该作者
三点睡的
回复

使用道具 举报

6#
风影 发表于 2015-7-26 17:18:14 | 只看该作者
好吧。查查
回复

使用道具 举报

5#
Wushao 发表于 2015-7-22 13:36:51 | 只看该作者
很好,学习饿
地板
root 发表于 2015-7-21 21:36:46 | 只看该作者
骚人
回复

使用道具 举报

板凳
duwenjie15 发表于 2015-7-21 10:58:08 来自手机 | 只看该作者
不错
回复

使用道具 举报

沙发
xu88531597 发表于 2015-7-21 10:40:38 | 只看该作者
嘿嘿 沙发
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-11-24 23:51, Processed in 0.951586 second(s), 33 queries , Gzip On.

快速回复 返回顶部 返回列表