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. 程序员还在用360,腾讯电脑管家清理注册表,清理垃圾?只能说你太low

    首先明明电脑上,就有清理垃圾和无用注册表的功能,只是我么缺少发现美的眼睛. 为什么不用360,腾讯全家桶. 那玩意固然香,而且真香,但是后台占用率太高,作为一个有洁癖的我,实在是不想看到自己右下角多一 ...

  2. VSCode 安装 React 项目

    1 下载nodejs 安装 (此时npm 和 node环境都已经装好) 2 安装淘宝镜像 npm install -g cnpm --registry=https://registry.npm.tao ...

  3. 【SpringBoot 基础系列】实现一个自定义配置加载器(应用篇)

    [SpringBoot 基础系列]实现一个自定义配置加载器(应用篇) Spring 中提供了@Value注解,用来绑定配置,可以实现从配置文件中,读取对应的配置并赋值给成员变量:某些时候,我们的配置可 ...

  4. QML设计飘散效果

    1,目标及展示 首先希望实现文字.图片.控件等在触发后,呈现飘散并消失的效果.在QT例程<Qt Quick Particles Examples>是一个海星点击鼠标后呈现打散的效果,这个效 ...

  5. 有感FOC算法学习与实现总结

    文章目录 基于STM32的有感FOC算法学习与实现总结 1 前言 2 FOC算法架构 3 坐标变换 3.1 Clark变换 3.2 Park变换 3.3 Park反变换 4 SVPWM 5 反馈部分 ...

  6. 管理环境一:venv

    初衷: 在工作的时候,我们会有很多个项目,每个项目使用的库的版本不一样,导致我们切换项目的时候会很麻烦. 比如:我有两个django项目,项目一使用的版本是 django 1.7 , 项目二使用的版本 ...

  7. ASP.NET Core依赖注入(DI)

    ASP.NET Core允许我们指定注册服务的生存期.服务实例将根据指定的生存时间自动处理.因此,我们无需担心清理此依赖关系,他将由ASP.NET Core框架处理.有如下三种类型的生命周期. 关于依 ...

  8. Azure AD B2C(一)初识

    一,引言(上节回顾) 上一节讲到Azure AD的一些基础概念,以及如何运用 Azure AD 包含API资源,Azure AD 是微软提供的云端的身份标识和资源访问服务,帮助员工/用户/管理员访问一 ...

  9. 减少 zabbix 频繁报警

    一直以来困扰的我问题是,触发器一旦触发,便会猛报警,如果你设置了email ,你的邮箱绝对会爆掉. 今天终于找到了方案,很简单,就是增加action 的steps ,从一个增加到default dur ...

  10. ArrayList详解-源码分析

    ArrayList详解-源码分析 1. 概述 在平时的开发中,用到最多的集合应该就是ArrayList了,本篇文章将结合源代码来学习ArrayList. ArrayList是基于数组实现的集合列表 支 ...