Visual Studio 2015速递(1)——C#6.0新特性怎么用

系列文章
Visual Studio 2015速递(1)——C#6.0新特性怎么用
Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力)
Visual Studio 2015速递(3)——ASP.NET 新特性
对于IDE的争论这个话题,在开发部已经由来已久,甚至可以追溯到微软.NET技术发布之前,当时的主打产品是ActiveX控件,随着Borland Delphi的快速崛起,RAD势不可挡,迅速催生了很多经典的IDE,微软旗下最有名气的就是VC和VB了;此后.NET技术发布,Visual Studio迈进20XX时代,对于VS2002和VS2003我已经基本没有太深的印象了,仅仅留在记忆里的是这货要高效率,必须得安装一个叫Resharper的玩意,否则也就比记事本强那么一点点;随后微软发布了VS2005和VS2008,增加了MSBUILD引擎,优化智能提示,改进扩展模型,基本上算是成熟稳健了;之后在WPF技术上创建的VS2010一直给人臃肿华丽的印象,但是缺乏让人眼前一亮的重磅功能;最近的两次升级和发布是VS2012和VS2013,其中摆在头条的几个重大点不是性能就是Web和云。
话说微软前些日子高调的宣布Visual Studio 2015正式发布日期是7月20日,这在开发部迅速展开讨论,大抵分成三派:
- 技术流——我去,这IDE来来去去不就是那么些功能么,各种超级“记事本”就能搞定的事情,何必挣破头去升级,只要技术没有换代,貌似桌面还是WinForm为主,WPF半死不活;Web算是大变样,不过那是运行环境而已;另外编译还是msbuild,看起来整个意义不大。
- 追新流——哈哈,微软又出新版本啦,快下载来试试吧,这次肯定有不少杀手级功能,比如C#6.0,还有新的Roslyn编译平台;另外asp.net 5.0可是很有看头的,终于摘掉system.web的依赖,全线改用OWIN啦。
- 冷静流——让他们这批小白鼠先淌着吧,确实爽在说,反正现在的任务有不是必须要这个。
最终还是追新流声音比较大,因为大家都对C#的新版本很期待,虽然微软C#语言组的PM Mads Torgersen说过,“C# 6.0主要是增强和提升效率”,但是对于控件开发小组而言依然相当期待,因为代码的可读性和效率是我们非常关键的部分。
这里让我们一起再来简单回顾一下C#6.0的重要特性吧:
- NameOf表达式。曾几何时,我们一直在hardcode各种参数异常,譬如:
void ThrowArgumentNullException(string firstVersionArgumentName)
{
threw new ArgumentNullException(“firstVersionArgumentName”, “can not be null”);
}
很悲催的是第二版说不定PM就说:“这个参数名字不合适,咱改改吧”,得益于IDE的重构功能,这个很容易,直接F2改名然后回车,签入代码;若干天后,测试找上门来,说你的参数名字是变了,但是异常信息没变。好吧,原来这里的hardcode字符组,这个是不会随着重构功能改变的!
再来看看新的Nameof表达式给我带来什么,同样的功能,代码如下:
void ThrowArgumentNullException(string firstVersionArgumentName)
{
threw new ArgumentNullException(nameof(firstVersionArgumentName), “can not be null”);
}
在回到IDE中,再次按F2触发重构改名,你会发现异常信息也能一起改变了。 - 空值判断操作符(Null-conditional operators),又一个重量级代码提升,直接上示例代码:
public static string Tuncate(this string value, int length)
{
if(!string.IsNullOrEmpty(value))
{
return value.Substring(0, Math.Min(value.Length, length));
}
return value;
}
这只是一个很小的折影,在开发过程中我们有无数这样的方法,无数次重复为空判断,但是这对代码的可读性和业务处理没有任何提升,反而增加了代码复杂度,让我们更难理解当初的设计初衷。显然,C#6.0使用null-conditional operators来向前推进了一大步:
public static string Tuncate(this string value, int length)
{
return value?.Substring(0, Math.Min(value.Length, length));
}
是不是更加简洁明了,而且能突出业务核心逻辑! - 字符串嵌入值(string interpolation),终于可以摆脱长长的string.Format函数了,如下代码就可以轻松改写了:
var fullName = string.Format(“FirstName is {0}, LastName is {1}”, customer.FirstName, customer.LastName);
使用新特性之后代码:
var fullName = “FirstName is \{customer.FirstName}, LastName is \{customer.LastName}”; - Lambda表达式函数和仅get的属性。对于那些只有一两句话的函数,可以省掉一些废话了,这个新功能可以大大节省人力:
public override string ToString() => “\{FirstName} \{LastName}”;
public override int GetHashcode() => (FirstName.GetHashcode()^8) & (LastName.GetHashcode());
public DateTime TimeStamp { get; } => DateTime.UtcNow; - 自动属性(auto-property)和索引初始化(Index initializers),终于可以像变量一样给属性赋初值了,大大提升代码可读性。
public string FirstName { get; set; } = “John”;
public string LastName { get; set; } = “Lennon”;
private Dictionary<int, string> _dicts = new Dictionary<int, string> { [3] = “third”, [8] = “eight” };
public string FullName { get; }
pubic MyClass ()
{
FullName = “\{FirstName} \{LastName}”;
} - 异常过滤器(Exception filter),回想曾经的错误处理,为了提示不同的错误,我们不得不定义多个自定义异常,有了异常过滤器之后,我们可以通过给异常添加一个简单的额外属性就可以解决了:
try { … }
catach ( CustomException ex ) if ( CheckException(ex) )
{ … }
想想这个还有一个好处,比如严重异常日志,在这个过滤器里我们可以最简单的判断,发现若果是严重的问题,可以直接做更早的提醒。 - 引用静态类(using static),懒人必备,想想某大仙在前面定义了一个超级无敌的静态类和辅助方法,你有超级多的地方需要用,然后你就得一遍一遍的敲这个静态类名和方法名,万一这个静态类名字很长就更悲催了,拷贝吧,最后总是看着大段大段重复心里很不爽(程序员大部分都有代码洁癖),好吧,这个应用静态类就能很好的解决了:
using GrapeCity.Demo.LongLongNameStaticClass;
void AnotherMethod()
{
UtilA(…) // no LongLongNameStaticClass.UtilA(…)
} - Await增强,终于可以把await放到catch和finally块中了,典型的用例是像IO资源操作之类可以简单整洁的处理关闭了:
Resource res = null;
try
{
res = await Resource.OpenAsync(…); //一直都可以而且一直这么做的
...
}
catch(ResourceException ex)
{
await Resource.LogAsync(res, ex); //写日志吧,不阻塞
}
finally
{
res?.CloseAsync(); //结合空值判断操作符更简洁明了
}
C#6.0 特性就到这里了,第二篇我们会介绍VS2015代码编辑和调试相关的内容,看VS 2015是如何提升效率和质量的。请持续关注吧!
Visual Studio 2015速递(1)——C#6.0新特性怎么用的更多相关文章
- Visual Studio 2015 速递(4)——高级特性之移动开发
系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...
- Visual Studio 2015速递(3)——ASP.NET 新特性
系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...
- Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力)
系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...
- Visual Studio 2015速递(4)——高级特性之移动开发
系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...
- Visual Studio 2019 preview中体验C# 8.0新语法
准备工作: Visual Studio 2019 Preview版本中并没有包含所有的C# 8.0的新功能,但目前也有一些可以试用了.在开始之前,需要进行入两项设置: 将Framework设置为.ne ...
- Visual Studio 2015 Tools for Unity使用基础
Unity4.x编辑器侧 具体版本号:Visual Studio 2015 Tools for Unity 3.7.0.1 该插件在:Microsoft Visual Studio Tools for ...
- 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus
最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...
- Microsoft Visual Studio 2015 下载、注册、安装过程、功能列表、问题解决
PS:请看看回复.可能会有文章里没有提到的问题.也许会对你有帮助哦~ 先上一张最终的截图吧: VS2015正式版出了,虽然没有Ultimate旗舰版,不过也是好激动的说.哈哈.可能有的小伙伴,由于工作 ...
- Windows 7 上安装Visual Studio 2015 失败解决方案
安装之前先要看看自己的系统支不支持,具体的可以看:https://www.visualstudio.com/en-us/visual-studio-2015-system-requirements-v ...
随机推荐
- 如何辨别具体的一种SaaS是否安全?
如何辨别具体的一种SaaS是否安全,需要把握以下几点: 1.传输协议加密 首先,要看SaaS产品提供使用的协议,是https://还是一般的http://,别小看这个s,这表明所有的数据在传输过程中都 ...
- python代码优化---就喜欢细节
地址:http://www.codeproject.com/Tips/829060/Python-Code-Optimizations-Part-One 转发过来保存一下.喜欢精雕细琢,编程才有乐趣. ...
- UITextField使用详解
转iOS中UITextField使用详解 (1) //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFr ...
- 00024500-0000-0000-C000-000000000046错误,在sys.web配置节添加一个用户给web站点。
<identity impersonate ="true" userName="administrator" password="123456& ...
- Win7 64位命令行编译cuda及设置Windows显卡响应时间
在开始菜单中找到Visual Studio 2013 >> Visual Studio Tools 选择86或64版本的VC命令提示符环境,我用的 VS2013 x86 Native To ...
- vs.net2008工具栏上找不到debug/release选项
使用vs.net多年,以前不时会用到release发布,近几年几乎不用的.近来生成时感觉有些项目使用了release选项,因为生成的dll的位置变了.于是想调整回bebug,发现vs.net2008的 ...
- Codeforces Zip-line 650D 345Div1D(LIS)
传送门 大意:给出一个序列,求修改一个数过后的最长上升子序列. 思路:可以用主席树在线搞,也可以用树状数组离线搞,明显后者好写得多.我们首先读取所有的询问,然后就把询问绑在给出的位置,然后我们正向做一 ...
- Windows phone8.1教务在线客户端
本人是个大二学生,由于学校的教务在线一直没出windows phone的教务在线,而且本身也对wp开发感兴趣,所以就尝试着开发一下 由于没有系统的学习,只能在摸索中前进,这背后的原理很简单,可不容易实 ...
- 编译PHP5缺t1lib包安装
t1lib_doc.dvi Error解决: 1. 下载t1lib-5.1.2.tar.gz2. 解决依赖关系:sudo apt-get build-dep t1lib 3. 安装:./configu ...
- Dubbo框架选型
一.为什么会是dubbo 1.Dubbo是一个分布式服务框架,提供RPC(远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.) 远程服务调用方案,以及SOA ...