C# 7.0 新增功能&结合微软简化理解
C# 7.0更新时间为2019.2左右

C# 7.0 ~ 7.3 分别需要VS2017 与 .NET Core 1.0、 .NET Core 2.0 SDK、.NET Core 2.1 SDK,需要在2017下载器中,依照步骤添加:已安装——>修改——>安装详细信息——>.NET桌面开发——>.NET Core X开发工具(打钩)——>修改

一、 out 变量
string str = "";
int result;
int.TryParse(str, out result);
result += ;
Console.WriteLine("result + 1 =? {0}", result.ToString());
1.1 out变量的声明,不再需单独声明。
string str = "";
int.TryParse(str, out int result);
result += ;
Console.WriteLine("result + 1 =? {0}", result.ToString());
二、 元组 ValueTuple(结构)
定义:包含多个数据元素的简单结构的方法
1. 下载NET Framework 4.7.2以上版本内置功能,可不用独立下拓展包NuGet,低版本需在VS拓展下载此包。
//NET Framework 4.7
var ToString = "Text:";
var one= ;
var Item1 = ;
var X= (ToString, one, Item1);
Console.WriteLine(X.Item1);
//Console.WriteLine(X.one); //NET Framework 4.8支持
Console.WriteLine(X.Item2);
Console.WriteLine(X.Item3); var pt1 = (X: , Y: );
var pt2 = (X: , Y: );
var xCoords = (pt1.X, pt2.X); Console.WriteLine(xCoords.Item1);
Console.WriteLine(xCoords.Item2);
Console.ReadKey();
2. 下载NET Framework 4.8以上版本
2.1 新用法
var X = (A: "a", B: "b"); Console.WriteLine(X.A);
2.2 或者未命名元素也可
var unnamed = ("one", "two");
2.3 拆包,这里的打包是以(1,2)作为元组pt1的元素,再将(pt1,pt2)作为元组xCoords的元素,算是元组嵌套。
var xCoords = (pt1:(1,2), pt2: (3,4));//打包
Console.WriteLine(xCoords.pt1.Item1);
Console.WriteLine(xCoords.pt2.Item2);
Console.WriteLine(xCoords.pt1);
Console.WriteLine(xCoords.pt2);
(var po1, var po2) = xCoords;//元组解析(拆包)
Console.WriteLine(po1);
Console.WriteLine(po2);
Console.ReadKey();
三、弃元
定义:在进行元组解构或使用 out 参数调用方法时,必须定义一个其值无意义且不用的变量。C# 增添了对弃元的支持。
标识:_
var t1 = (w:,,,,,);
(_, var p2, _ , var p4, _, _) = t1;
Console.WriteLine(p2);
Console.WriteLine(p3);
四、匹配模式
is, when, null 对于if, switch case 等作变量匹配时,一些新的用法。
is:查询变量定义的类型;
when:作为case 的附加条件;
null:作为空(null)条件时的选项。
List<object> listA = new List<object>();
listA.Add();
listA.Add();
listA.Add();
int sum = ;
foreach (var i in listA)
{
switch (i)
{
case :
if (sum is int j)//检查变量是否为int,j为新定义该范围的局部变量
{ sum += ; }
break;
case int n when n > :
sum += n;
Console.WriteLine("sum ={0} ", sum);
break;
case null:
break;
default:
break;
}
}
五、一些兼容更改
原代码
public double Square(double value)
{
return value * value;
}
新代码
public double Square(double value) => value * value;
源兼容的新代码
public double Square(in double value) => value * value;
六、ref 局部变量和返回结果
可以直接返回局部变量
public static ref int Find(int[,] matrix)
{
return ref matrix[, ];
}
也可以将返回值声明为 ref 并在矩阵中修改该值
ref var item = ref Find(matrix, (val) => val == );
七、(新语法)通用的异步返回类型
需要添加 NuGet 包 System.Threading.Tasks.Extensions 才能使用 ValueTask<TResult> 类型。此功能估计需要NET Framework 4.8以上版本才有。此增强功能对于库作者最有用,可避免在性能关键型代码中分配 Task。
async缓存结果,通过ValueTask异步返回。
public async ValueTask<int> Func()
{
await Task.Delay();
return ;
}
八、数字文本语法改进
二进制0b前标,十进制不用标,均用_分隔,二进制四位分隔,十进制千位(三位)分隔。
public const int Sixteen = 0b0001_0000;
public const long BillionsAndBillions = 100_000_000_000;
public const double AvogadroConstant = .022_140_857_747_474e23;
public const decimal GoldenRatio = .618_033_988_749_894_848_204_586_834_365_638_117_720_309_179M;
参考微软的公告,对其简化和自己实际验证之后的理解。
C# 7.0 新增功能&结合微软简化理解的更多相关文章
- C#基础拾遗系列之二:使用ILSpy探索C#7.0新增功能点
C#基础拾遗系列之二:使用ILSpy探索C#7.0新增功能点 第一部分: C#是一种通用的,类型安全的,面向对象的编程语言.有如下特点: (1)面向对象:c# 是面向对象的范例的一个丰富实现, 它 ...
- C#2.0新增功能06 协变和逆变
连载目录 [已更新最新开发文章,点击查看详细] 在 C# 中,协变和逆变能够实现数组类型.委托类型和泛型类型参数的隐式引用转换. 协变保留分配兼容性,逆变则与之相反. 以下代码演示分配兼容性.协 ...
- C#基础拾遗系列之二:C#7.0新增功能点
第一部分: C#是一种通用的,类型安全的,面向对象的编程语言.有如下特点: (1)面向对象:c# 是面向对象的范例的一个丰富实现, 它包括封装.继承和多态性.C#面向对象的行为包括: 统一的类型系统 ...
- C#7.0新增功能点
原文地址: https://www.cnblogs.com/runningsmallguo/p/8972678.html 第二部分:C#7.0新增的功能 (1)数字字面量的提升: C#7中的数字文字 ...
- C#2.0新增功能01 分布类与分部方法
连载目录 [已更新最新开发文章,点击查看详细] 分部类型 拆分一个类.一个结构.一个接口或一个方法的定义到两个或更多的文件中, 每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组 ...
- 说说C# 8.0 新增功能Index和Range的^0是什么?
前言 在<C# 8.0 中使用 Index 和 Range>这篇中有人提出^0是什么意思?处于好奇就去试了,结果抛出异常.查看官方文档说^0索引与 sequence[sequence.Le ...
- Android 7.0 新增功能和api
Android 7.0 Nougat 为用户和开发者引入多种新功能.本文重点介绍面向开发者的新功能. 请务必查阅 Android 7.0 行为变更以了解平台变更可能影响您的应用的领域. 要详细了解 A ...
- C#4.0新增功能02 命名实参和可选实参
连载目录 [已更新最新开发文章,点击查看详细] C# 4 介绍命名实参和可选实参. 通过命名实参,你可以为特定形参指定实参,方法是将实参与该形参的名称关联,而不是与形参在形参列表中的位置关联. ...
- Xcode 9.0 新增功能大全
Xcode是用于为Apple TV,Apple Watch,iPad,iPhone和Mac创建应用程序的完整开发人员工具集.Xcode开发环境采用tvOS SDK,watchOS SDK,iOS SD ...
随机推荐
- STL部分学习总结
一.map/multimap map/multimap映射容器的元素数据是由一个Key和一个Value成的,key与映照value之间具有一一映照的关系. map/multimap容器的数据结构也采用 ...
- 白话typescript中的【extends】和【infer】(含vue3的UnwrapRef)
大家好,我是小雨小雨,致力于分享有趣的.实用的技术文章. 内容分为翻译和原创,如果有问题,欢迎随时评论或私信,希望和大家一起进步. 分享不易,希望能够得到大家的支持和关注. extends types ...
- python(写入 excel 操作 xlwt 模块)
一.安装 xlwt 模块 pip install xlwt 二.excel 写入操作 这种方式只能新增或者覆盖文件写入 import xlwt # 创建一个workbook 设置编码 workbook ...
- 安装KubeSphere
1. KubeSphere 是什么 1.1. 官方解释 KubeSphere是一个分布式操作系统,提供以Kubernetes为核心的云原生堆栈,旨在成为第三方应用程序的即插即用架构,以促进其生态系统的 ...
- SSM框架完整开发流程
----------------第一阶段-------------- 1.数据库建模 2.生成sql语句 3.在mysq客户端使用命令方式执行sql脚本,生成数据库 4.允许远程访问mysql GRA ...
- C - A Plug for UNIX POJ - 1087 网络流
You are in charge of setting up the press room for the inaugural meeting of the United Nations Inter ...
- 基本Linux命令(上)
Linux的难点在于我们需要记忆大量的命令及参数.如有问题请批评指正,在下感激不尽. Linux的命令都是在shell下使用的,也就是我们常说的终端(Terminal).包 ...
- Bootstrap初识
目录 概述 快速入门 响应式布局 CSS样式和JS插件 全局CSS样式 组件 插件 案例:黑马旅游网 概述 概念:一个前端开发的框架,Bootstrap是美国Twitter公司的设计师Mark Ott ...
- Linux编程实现递归查找文件
命令格式如下:SCRIPT_NAME SEARCH_ON_DIR SEARCH_FILENAME #!/bin/bash Find(){ files=`` for file i ...
- 使用Android studio过程中发现的几个解决R变红的办法
刚开始使用Android studio的时候,好几次碰见新建了一个xml文件,或者new了一个activity之后,Android studio莫名其妙的报错了,而显示红色的地方就是常用的(R.id. ...