首页 / C# / [干货来袭]C#6.0新特性
[干货来袭]C#6.0新特性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了[干货来袭]C#6.0新特性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2354字,纯文字阅读大概需要4分钟。
内容图文
微软昨天发布了新的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"; publicstring Last { get; set; } = "Doe"; }
public class Customer { public string First { get; } = "Jane"; publicstring 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 namespaceclass Program { staticvoid Main() { var range = Range(5, 17); // Ok: not extensionvar odd = Where(range, i => i % 2 == 1); // Error, not in scopevar 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. }
基本到此就结束了, - -,水平有限.不好与不完善的地方请指出..免得误导大家..
原文:http://www.cnblogs.com/GuZhenYin/p/4663562.html
内容总结
以上是互联网集市为您收集整理的[干货来袭]C#6.0新特性全部内容,希望文章能够帮你解决[干货来袭]C#6.0新特性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。