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

对于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的重要特性吧:

  1. 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触发重构改名,你会发现异常信息也能一起改变了。
  2. 空值判断操作符(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));
    }
    是不是更加简洁明了,而且能突出业务核心逻辑!
  3. 字符串嵌入值(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}”;
  4. Lambda表达式函数和仅get的属性。对于那些只有一两句话的函数,可以省掉一些废话了,这个新功能可以大大节省人力:
    public override string ToString() => “\{FirstName} \{LastName}”;
    public override int GetHashcode() => (FirstName.GetHashcode()^8) & (LastName.GetHashcode());
    public DateTime TimeStamp { get; } => DateTime.UtcNow;
  5. 自动属性(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}”;
    }
  6. 异常过滤器(Exception filter),回想曾经的错误处理,为了提示不同的错误,我们不得不定义多个自定义异常,有了异常过滤器之后,我们可以通过给异常添加一个简单的额外属性就可以解决了:
    try { … }
    catach ( CustomException ex ) if ( CheckException(ex) )
    { … } 
    想想这个还有一个好处,比如严重异常日志,在这个过滤器里我们可以最简单的判断,发现若果是严重的问题,可以直接做更早的提醒。
  7. 引用静态类(using static),懒人必备,想想某大仙在前面定义了一个超级无敌的静态类和辅助方法,你有超级多的地方需要用,然后你就得一遍一遍的敲这个静态类名和方法名,万一这个静态类名字很长就更悲催了,拷贝吧,最后总是看着大段大段重复心里很不爽(程序员大部分都有代码洁癖),好吧,这个应用静态类就能很好的解决了:
    using GrapeCity.Demo.LongLongNameStaticClass;
    void AnotherMethod()
    {
      UtilA(…) // no LongLongNameStaticClass.UtilA(…)
    }
  8. 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是如何提升效率和质量的。请持续关注吧!

时间: 2024-08-01 10:44:41

Visual Studio 2015速递(1)——C#6.0新特性怎么用的相关文章

Visual Studio 2015速递(3)——ASP.NET 新特性

系列文章 Visual Studio 2015速递(1)--C#6.0新特性怎么用 Visual Studio 2015速递(2)--提升效率和质量(VS2015核心竞争力) 早在5月份的Build大会上微软就非常高调的宣传ASP.NET 5了,做为微软开发工具中最重要的几个技术栈之中的一个,本次VS2015的公布却没有尾随公布正式版,也算是一件不大不小的憾事. 即使没有ASP.NET 5.VS2015也不会让你太失望,毕竟还是有非常多小幅的升级和增强. 先来说说ASP.NET 4.6吧.微软总

Visual Studio 2015 速递(4)——高级特性之移动开发

系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studio 2015速递(3)——ASP.NET 新特性 说是VS2015的高级特性,其实也高级不到哪里,看起来确实“高大上”,正如BUILD2015上演示的那样,你真的可以只用VS2015就可以“通吃”各种移动设备应用了,当然,是有条件的“通吃”,微软给了一系列的解决方案,来辅助完成这一目标. 首先我们来

Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力)

前文提到过一个神器叫Resharper,功能强大.编码效率和代码质量那是蹭蹭的涨,可是神器的最大问题是太耗费资源了,每次系统提示内存不足的时候,那叫一个纠结啊.因此每次新的VS公布的时候都不由自主的查看是否增强编辑功能,不由自主的讨论一番,这次VS2015也不例外. 去年微软放出Roslyn的时候,微软就以前放出过一个"尝鲜"版的VS编辑增强功能,恰恰就是重构(reflector).话说这个对控件开发太实用了,可是之前仅仅有纠结的Resharper才有的.尽管它也不是非常完整,当时还鼓

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

准备工作: Visual Studio 2019 Preview版本中并没有包含所有的C# 8.0的新功能,但目前也有一些可以试用了.在开始之前,需要进行入两项设置: 将Framework设置为.net core 3.0 将C#语法设置为8.0 也可以直接编辑.csproj文件,修改TargetFramework和LangVersion为如下形式: <TargetFramework>netcoreapp3.0</TargetFramework>     <LangVersio

Microsoft Visual Studio 2015 下载、注册、安装过程、功能列表、问题解决

PS:请看看回复.可能会有文章里没有提到的问题.也许会对你有帮助哦~ VS2015正式版出了,虽然没有Ultimate旗舰版,不过也是好激动的说.哈哈.可能有的小伙伴,由于工作环境不允许.或者害怕有什么问题.所以不敢安装vs2015.只能眼巴巴地干瞅着. 因此,我决定,冒一次重装系统的风险,试着安装一下,正好也试试什么序列号能用.希望这次牺牲能值得~~呵呵. 下载地址:Microsoft Visual Studio 2015 全版本+离线MSDN+全部插件 赶紧下载,打开,发现VS2015对安装

Visual Studio 2015 的安装与使用

为什么要使用Visual Studio 2015? 它是中文的.界面友好.自动补全.实时语法错误提示(上图中波浪线部分).单步调试--最重要的社区版是免费的!所以你不必再昧着良心使用不合法.老旧的不兼容当代系统的VC++6.0,Come to VS2015 and enjoy it! 接下来我将告诉你如何安装以及使用它编写.运行C/C++程序! ? 获得Visual Studio 2015 进入Visual Studio 官方网站,点击"下载Visual Studio社区". 如果一切

Visual Studio 2015+CUDA8.0+CUDNN5配置Caffe-windows(BLVC)

综合  来源:Angle_Cal  2016-12-19 17:32  624℃  0评论 BLVC版本的Caffe-windows已经支持Visual Studio 2015,下面的配置过程是综合了其他人的经验而且验证过的,可以确保有效. 下载Caffe-Windows(BLVC) 下载地址:GitHub 下载好解压缩即可. 安装VS2015,CUDA,CUDNN,Anaconda,CMake VS2015 安装请自行完成,需要注意的是: ①如果你以前安装有早起的VS,那么安装VS2015可能

用Visual Studio 2015 编写第一个UMDF驱动遇到的问题!!

前提:Visual Studio 2015已经成功安装了驱动环境,WDK都已经完全正常安装了,在Visual Studio 2015的菜单可以看到"Driver"菜单项了.这说明已经完全可以正常开发一个驱动了,但是不幸的是,我遇到问题了,希望你不要和我一样那么不幸,至少你如果遇到和我类似问题,你看了这篇文章,顺利解决了! 问题:无法正常编译建立的UMDF驱动,错误截图 按照错误提示查找这个文件,发现在"C:\Program Files (x86)\Windows Kits\1

【Asp.Net Core】一、Visual Studio 2015 和 .NET Core 安装

安装 Visual Studio 和 .NET Core 1.安装 Visual Studio Community 2015,选择 Community 下载并执行默认安装.Visual Studio 2015 安装程序首页 2.安装 .NET Core + Visual Studio 工具 ,windows系统的可以从百度网盘下载 创建 Web 应用程序 1.起始页 点击 新建项目(或 文件→新建→项目) 2.选择 左侧 .NET Core (如果没有安装.NET Core + Visual S