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 新增功能&结合微软简化理解的更多相关文章

  1. C#基础拾遗系列之二:使用ILSpy探索C#7.0新增功能点

    C#基础拾遗系列之二:使用ILSpy探索C#7.0新增功能点   第一部分: C#是一种通用的,类型安全的,面向对象的编程语言.有如下特点: (1)面向对象:c# 是面向对象的范例的一个丰富实现, 它 ...

  2. C#2.0新增功能06 协变和逆变

    连载目录    [已更新最新开发文章,点击查看详细] 在 C# 中,协变和逆变能够实现数组类型.委托类型和泛型类型参数的隐式引用转换. 协变保留分配兼容性,逆变则与之相反. 以下代码演示分配兼容性.协 ...

  3. C#基础拾遗系列之二:C#7.0新增功能点

    第一部分: C#是一种通用的,类型安全的,面向对象的编程语言.有如下特点: (1)面向对象:c# 是面向对象的范例的一个丰富实现, 它包括封装.继承和多态性.C#面向对象的行为包括: 统一的类型系统 ...

  4. C#7.0新增功能点

    原文地址:  https://www.cnblogs.com/runningsmallguo/p/8972678.html 第二部分:C#7.0新增的功能 (1)数字字面量的提升: C#7中的数字文字 ...

  5. C#2.0新增功能01 分布类与分部方法

    连载目录    [已更新最新开发文章,点击查看详细] 分部类型 拆分一个类.一个结构.一个接口或一个方法的定义到两个或更多的文件中, 每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组 ...

  6. 说说C# 8.0 新增功能Index和Range的^0是什么?

    前言 在<C# 8.0 中使用 Index 和 Range>这篇中有人提出^0是什么意思?处于好奇就去试了,结果抛出异常.查看官方文档说^0索引与 sequence[sequence.Le ...

  7. Android 7.0 新增功能和api

    Android 7.0 Nougat 为用户和开发者引入多种新功能.本文重点介绍面向开发者的新功能. 请务必查阅 Android 7.0 行为变更以了解平台变更可能影响您的应用的领域. 要详细了解 A ...

  8. C#4.0新增功能02 命名实参和可选实参

    连载目录    [已更新最新开发文章,点击查看详细] C# 4 介绍命名实参和可选实参. 通过命名实参,你可以为特定形参指定实参,方法是将实参与该形参的名称关联,而不是与形参在形参列表中的位置关联.  ...

  9. Xcode 9.0 新增功能大全

    Xcode是用于为Apple TV,Apple Watch,iPad,iPhone和Mac创建应用程序的完整开发人员工具集.Xcode开发环境采用tvOS SDK,watchOS SDK,iOS SD ...

随机推荐

  1. C++ 快读快写

    inline int read() { int s=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; c ...

  2. Jenkins如何进行权限管理

    一.安装插件 插件名:Role-based Authorization Strategy 二.配置授权策略 三.创建用户 四.添加并配置权限 4.1.添加Global Role 普通角色拥有全局只读权 ...

  3. 详解十大经典数据挖掘算法之——Apriori

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第19篇文章,我们来看经典的Apriori算法. Apriori算法号称是十大数据挖掘算法之一,在大数据时代威风无两,哪 ...

  4. P1640 连续攻击游戏

    题目传送门 Ⅰ.二分图匹配 其实这题应该不难看出是二分图匹配(尽管我没看出来) 每个物品只能用一次,实际上就是1~n的数字对物品的最大匹配 把物品的两个属性向物品编号连边,之后就从数字1一直匹配过去 ...

  5. P3467(矩形覆盖问题)

    描述:https://www.luogu.com.cn/problem/P3467 1.考虑如果整个建筑物链是等高的,一张高为链高,宽为整个建筑物宽的海报即可完全覆盖: 2.若有两个不等高的元素组成建 ...

  6. Java模拟UDP通信

    目录 Java基础:模拟UDP通信 1.一次发送,一次接收 1.1.发送方 1.2.接收方 2.多次发送,多次接收 2.1.发送方 2.2.接收方 3.模拟双方通信 3.1.发送方的线程 3.2.接收 ...

  7. maven项目变成web项目

    具体步骤如图所示: 第一步:建议一个Maven Webapp项目  第二步:右击项目,选择属性,找到project facets,点击tuntimes标签选择apache tomcat v6.0选中P ...

  8. OpenWrt(LEDE)2020.4.12编译 UnPnP+NAS+多拨+网盘+DNS优化+帕斯沃 无缝集成

    固件说明 基于Lede OpenWrt R2020.4.8版本(源码截止2020.4.12)Lienol Feed及若干自行维护的软件包 结合家庭x86软路由场景需要定制 按照家庭应用场景对固件及软件 ...

  9. 【Hadoop离线基础总结】Yarn集群的资源调度

    Yarn集群的资源调度 介绍 概述 Yarn是 Hadoop 2.x 引入的新的资源管理系统模块,主要用于管理集群当中的资源(主要是服务器的各种硬件资源,比如内存.CPU等),它不光管理硬件资源,还管 ...

  10. 新抽象语法树(AST)给 PHP7 带来的变化

    本文大部分内容参照 AST 的 RFC 文档而成:https://wiki.php.net/rfc/abstract_syntax_tree,为了易于理解从源文档中节选部分进行介绍. 我的官方群点击此 ...