简介

VS 2015中已经包含C# 6.0. C#在发布不同版本时,C#总是会有新特性,比如C#3.0中出现LINQ,C#4.0中的动态特性,c#5.0中的异步操作等。.

C# 6.0中与增加了不少新的特性,帮助开发人员更好的编程。

下面的示例需要下载vs2015,这样才会有C#6.0环境,主要的新特性有:

  1. 使用Static参数,直接引用类中的方法或属性,不用每次都带上类名。
    using System; 
    using static System.Console; namespace CSharp6FeaturesDemo
    {
    class Program
    {
    static void Main(string[] args)
    {
    WriteLine("This is demo for C# 6.0 New Features");

    ReadLine();
    }
    }
    }
  2. 成员属性自动初始化,在定义属性时,即可通过简单的代码初始化属性的值,而不用在构造函数中初始化。
    public class Employee     
    {
    public Guid EmployeeId { get; set; } = Guid.NewGuid();
    public string FirstName { get; set; } = "Mukesh";
    public string LastName { get; set; } = "Kumar";
    public string FullName { get { return string.Format("{0} {1}", FirstName, LastName); } }
    }
  3. 集合中初始化成员的方式有所变化,变得更直观。
    Dictionary<int, string> myDictionary = new Dictionary<int, string>()             
    {
    [1] = "Mukesh Kumar",
    [2] = "Rahul Rathor",
    [3] = "Yaduveer Saini",
    [4] = "Banke Chamber"
    };
  4. 字符串格式化,以前要使用string.format("{0}-{1}",v1, v2); 来格式化输出,使用数字,容易出错,现在直接使用变量名
    Console.WriteLine($"The Full Name of Employee {firstName} {lastName}");
    
  5. C#6.0中,可以使用lambda表达式在一行内定义一个简单的函数,而不是传统的需要定义一个完整的函数。
    6.0之前
    public static string GetFullName(string firstName, string lastName)         
    {
    return string.Format("{0} {1}", firstName, lastName);
    }

    6.0中

    public static string GetFullName(string firstName, string lastName) => firstName + " " + lastName;

  6. C#6.0之前,一个属性需要同时定义get和set方法,即使set方法根本不需要,比如只读的属性。在C#6.0中,可以只定义一个get方法,并设置属性的初始值
    string FirstName { get; } = "Mukesh";
    
  7. 异常处理改进,以前异常处理中,需要在一个catch块中判断每个异常值的情况,然后执行不同的代码,而C#6.0中,可以定义多个 catch块,根据不同异常值处理不同的代码。
    try 
    {
    throw new Exception(errorCode.ToString());
    }
    catch (Exception ex) when (ex.Message.Equals("404"))
    { WriteLine("This is Http Error"); }
    catch (Exception ex) when (ex.Message.Equals("401"))
    { WriteLine("This is Unathorized Error"); }
    catch (Exception ex) when (ex.Message.Equals("403"))
    { WriteLine("Forbidden"); }
  8. Null值判断改进,以前操作某个变量需要判断是否null,否则程序抛出异常;在C#6.0中,可以使用一个简单的问号?即可自动判断是否null,如果是,则输出null值。
    //No need to check null in if condition             
    //null operator ? will check and return null if value is not there
    WriteLine(employees.FirstOrDefault()?.Name); //set the default value if value is null
    WriteLine(employees.FirstOrDefault()?.Name ?? "My Value");
  9. 变量声明改进,以前声明一个变量,用于从函数中返回值,需要在函数外定义,在C#6.0中,可直接在函数调用时定义变量。
    static void Main(string[] args)         
    {
    if (int.TryParse("20", out var result)) {
    return result;
    }
    return 0; // result is out of scope
    }

具体内容和示例代码可参考:

http://www.codeproject.com/Articles/1070659/All-About-Csharp-New-Features

C# 6.0新特性(转载)的更多相关文章

  1. 转载 精进不休 .NET 4.0 (5) - C# 4.0 新特性之并行运算(Parallel) https://www.cnblogs.com/webabcd/archive/2010/06/03/1750449.html

    精进不休 .NET 4.0 (5) - C# 4.0 新特性之并行运算(Parallel)   介绍C# 4.0 的新特性之并行运算 Parallel.For - for 循环的并行运算 Parall ...

  2. Servlet 3.0 新特性详解 (转载)

    原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性概述 Servlet 3.0 作为 Jav ...

  3. atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性

    atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性   1.1. Servlet和JSP规范版本对应关系:1 1.2. Servlet2 ...

  4. C# 7.0 新特性2: 本地方法

    本文参考Roslyn项目中的Issue:#259. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...

  5. C# 7.0 新特性1: 基于Tuple的“多”返回值方法

    本文基于Roslyn项目中的Issue:#347 展开讨论. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: ...

  6. C# 7.0 新特性3: 模式匹配

    本文参考Roslyn项目Issue:#206,及Docs:#patterns. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# ...

  7. C# 7.0 新特性4: 返回引用

    本文参考Roslyn项目中的Issue:#118. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...

  8. atitit.j2ee 1.5 1.6 的不同跟 Servlet 3.0新特性总结

    atitit.j2ee 1.5 1.6 的不同跟 Servlet 3.0新特性总结 1. jar比较,j2ee 1.6 添加了许多的jar 1 2. ,Servlet 3.0 2 2.1. 可插性   ...

  9. AFNetworking 2.0 新特性讲解之AFHTTPSessionManager

    AFNetworking 2.0 新特性讲解之AFHTTPSessionManager (2014-02-17 11:56:24) 转载▼     AFNetworking 2.0 相比1.0 API ...

  10. ASP.NET Web API 2.0新特性:Attribute Routing1

    ASP.NET Web API 2.0新特性:Attribute Routing[上篇] 对于一个针对ASP.NET Web API的调用请求来说,请求的URL和对应的HTTP方法的组合最终决定了目标 ...

随机推荐

  1. [转]为何需要调用“super viewDidLoad

    转载地址:http://liwpk.blog.163.com/blog/static/36326170201165104413314/   - (void)didReceiveMemoryWarnin ...

  2. UDP:用户数据报协议

    UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报.这与面向流字符的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数 ...

  3. easylui datagrid 动态生成列

    function load(sdate) { $.getJSON("workorder/statistics.do", { sdate : sdate+'-01' }, funct ...

  4. Windows计划任务执行时不显示窗口的问题

    最近开发了工具,带界面的,需要定时执行的,为了方便直接用Windows计划任务做定时了.跑了一段时间发现,进程中也有,就是看不到程序的界面,进程的执行貌似也阻塞了. 从网上查了下,发现时启动方式的问题 ...

  5. 安装DotNetCore.1.0.0-VS2015Tools.Preview2失败解决方案

    1.把安装文件放入非系统盘 2.命令行带参数运行: DotNetCore.1.0.0-VS2015Tools.Preview2.0.1.exe SKIP_VSU_CHECK=1 或 DotNetCor ...

  6. Java开发中经典的小实例-(比较输入数值的最大值、最小值和平均值)

    //输入数字个数来产生数字并且比较大小 import java.util.Scanner;public class Test1 {     public static void main(String ...

  7. consul笔记

    1 webui 默认最新的webui只支持127.0.0.1这种的本机网站的 不支持192.168.1.2 启用192.168.1.2的支持 命令加 -client 192.168.2.156 感谢赵 ...

  8. Shell脚本查看apk签名信息

    用shell写了一个查看apk签名的脚本.代码很少也很简单 支持递归目录查询 #!/bin/bash #使用方法 ./getcertificate.sh xx.apk get_signature() ...

  9. Hibernate <查询缓存>

    查询缓存: 定义:查询缓存它是基于二级缓存的,可以保存普通属性查询的结果,查询对象实体时,他会保存id作为键,查询结果作为值,下个对象访问时,可以直接查到 查询缓存查询实体对象时,显著的特点是,会执行 ...

  10. div 一段时间后自动隐藏

    一.div弹出后自动消失 这里并没有删除 setTimeout(function(){$(".alert").hide();},2000); 直接在js文件中需要的地方添加执行这段 ...