C# 6.0新特性(转载)
简介
VS 2015中已经包含C# 6.0. C#在发布不同版本时,C#总是会有新特性,比如C#3.0中出现LINQ,C#4.0中的动态特性,c#5.0中的异步操作等。.
C# 6.0中与增加了不少新的特性,帮助开发人员更好的编程。
下面的示例需要下载vs2015,这样才会有C#6.0环境,主要的新特性有:
- 使用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();
}
}
} - 成员属性自动初始化,在定义属性时,即可通过简单的代码初始化属性的值,而不用在构造函数中初始化。
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); } }
} - 集合中初始化成员的方式有所变化,变得更直观。
Dictionary<int, string> myDictionary = new Dictionary<int, string>()
{
[1] = "Mukesh Kumar",
[2] = "Rahul Rathor",
[3] = "Yaduveer Saini",
[4] = "Banke Chamber"
}; - 字符串格式化,以前要使用string.format("{0}-{1}",v1, v2); 来格式化输出,使用数字,容易出错,现在直接使用变量名
Console.WriteLine($"The Full Name of Employee {firstName} {lastName}");
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;
- C#6.0之前,一个属性需要同时定义get和set方法,即使set方法根本不需要,比如只读的属性。在C#6.0中,可以只定义一个get方法,并设置属性的初始值
string FirstName { get; } = "Mukesh";
- 异常处理改进,以前异常处理中,需要在一个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"); } - 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"); - 变量声明改进,以前声明一个变量,用于从函数中返回值,需要在函数外定义,在C#6.0中,可直接在函数调用时定义变量。
static void Main(string[] args)
{
if (int.TryParse("20", out var result)) {
return result;
}
return 0; // result is out of scope
}
具体内容和示例代码可参考:
C# 6.0新特性(转载)的更多相关文章
- 转载 精进不休 .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 ...
- Servlet 3.0 新特性详解 (转载)
原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性概述 Servlet 3.0 作为 Jav ...
- 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 ...
- C# 7.0 新特性2: 本地方法
本文参考Roslyn项目中的Issue:#259. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...
- C# 7.0 新特性1: 基于Tuple的“多”返回值方法
本文基于Roslyn项目中的Issue:#347 展开讨论. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: ...
- C# 7.0 新特性3: 模式匹配
本文参考Roslyn项目Issue:#206,及Docs:#patterns. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# ...
- C# 7.0 新特性4: 返回引用
本文参考Roslyn项目中的Issue:#118. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...
- 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. 可插性 ...
- AFNetworking 2.0 新特性讲解之AFHTTPSessionManager
AFNetworking 2.0 新特性讲解之AFHTTPSessionManager (2014-02-17 11:56:24) 转载▼ AFNetworking 2.0 相比1.0 API ...
- ASP.NET Web API 2.0新特性:Attribute Routing1
ASP.NET Web API 2.0新特性:Attribute Routing[上篇] 对于一个针对ASP.NET Web API的调用请求来说,请求的URL和对应的HTTP方法的组合最终决定了目标 ...
随机推荐
- 监控web服务方法
本地监控:端口 netstat -anltup | grep 80 nmap ip -p 80 telnet ip:80 lsof -i :80|wc -l 进程 ps -ef| grep ngi ...
- Account Team使用说明
Account Team Account Team 以下简称客户小组. 背景介绍 帐户是与您的业务相关的公司和组织,每个帐户都存储了商家名称.地址和电话号码等信息.可以针对每个帐户存储相关的联系人. ...
- Linux和Windows下ping命令详解(转:http://linux.chinaitlab.com/command/829332.html)
一.Linux下的ping参数 用途 发送一个回送信号请求给网络主机. 语法 ping [ -d] [ -D ] [ -n ] [ -q ] [ -r] [ -v] [ \ -R ] [ -a add ...
- hdu 5780 gcd
题意:给定$x, n$满足$1 \leq x, n \leq 1000000$,求$\sum{(x^a-1,x^b-1)}$对$1e9+7$取模后的值,其中$1 \leq a, b \leq n$. ...
- Jmeter函数 唯一取值 笔记
java sample时: result.setIdleTime(毫秒):设置waste time ,jmeter在统计响应时间时会自动减去此函数设置的时间 result.setSuccessful( ...
- [Machine-Learning] 机器学习中的几个度量指标
Several classification metrics for ML/DM methods. 主要解释下机器学习(或数据挖掘)中的几个度量指标. 1. 关于 "TN/TP/FN/FP&q ...
- (转)Could not create the view: An unexpected exception was thrown. 电脑突然断电,myeclipse非正常关闭,出现错误
问题:电脑突然断电,myeclipse非正常关闭,“Package Explorer”非正常显示,出现错误“Could not create the view: An unexpected excep ...
- 从零开始学iPhone开发(4)——使用WebView
转自 总结关于iPhone中UIWEBVIEW读取本地GBK编码格式html 关于webView读取本地GBK编码的html,尝试了两天,终于成功. 欢喜之余,把感想记下来.一般来说,不成都是人犯错, ...
- 【Unity3D游戏开发】之游戏目录结构之最佳实践和优化 (十一)
游戏目录结构之最佳实践 前置条件 1.多人协作开发,git管理 2.游戏不大,所有Scene合并到一起Scene中,eg.RoleScene.MapScene.StoreScene 3.Master一 ...
- c++ ado 调用存储过程并得到输出参数和返回值
// AccessSqlserverByAdo.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h ...