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. Notations

    下面四种记号是为了建立函数间的相对级别. CLRS上的一张图很直观: 大O记号 定义:如果存在正常数\(c\)和\(n_0\),使得当\(N\ge n_o\)时\(T(N)\le cf(N)\),记\ ...

  2. 补题Codeforces 1102E. Monotonic Renumeration

    这个题还是不太懂,下面附上的是大佬的题解(https://zhanghuimeng.github.io/post/codeforces-1102e-monotonic-renumeration/) E ...

  3. 数学--数论--HDU 2802 F(N) 公式推导或矩阵快速幂

    Giving the N, can you tell me the answer of F(N)? Input Each test case contains a single integer N(1 ...

  4. 10.秋招复习简单整理之CSMA/CD协议

    我们知道,总线上只要有一台计算机在发送数据,总线的传输资源就被占用.因此,在同一时间只能允许一台计算机发送数据,否则各计算机之间就会相互干扰,使得所发送的数据被破坏.因此,如何协调总线上各计算机的工作 ...

  5. 【原创】Linux Mutex机制分析

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  6. golang之channel

    Buffered Channels package main import "fmt" func main() { ch := make(chan int, 2) ch <- ...

  7. springmvc与struts2执行流程比较

    之前写过一篇struts2的执行流程的文章了,这里对struts2的流程就不做过多的分析,这篇文章主要分析spring-mvc的执行流程以 及struts2与spring-mvc的差别. 1.stru ...

  8. MySQL基础总结(三)

    ORDER BY排序 ORDER BY默认是ASC(升序),降序是DESC LIMIT限制查询结果显示条数 LIMIT显示条数 LIMIT偏移量,显示条数 到目前为止有关查询数据的操作(DQL) 更新 ...

  9. CF-234 F. Fence DP

    F. Fence 这个刷Fence的问题看到好几个了... 题意 有一个栅栏,由n块宽为1cm的木板组成,第i块木板高为hi,要给他们刷上油漆,有一桶红色的可以刷a平方厘米的油漆,一桶绿色的可以刷b平 ...

  10. MATLAB1127(传递函数)

    sys=tf(400,[1,50,0]) sys = 400 ---------- s^2 + 50 s 其中,tf()函数的用法.   传递函数 dsys=c2d(sys,ts,'z') dsys ...