C# 8 新增小功能

尽管 C# 8 应该会在今年发布,并且 C# 8.x 和 9 的路线图也开始形成,但是,微软正在继续审查下一个版本的特性。

目标类型表达式

假设我们有 A、B 和 C 三种类型,其中类型 B 和 C 是类型 A 的子类型。如果我们使用如下所示的语句,那么,编译器无法确定右侧要返回的类型。

A a1 = b ?? cA a2 = x>0 ? b : cA a3 = 	a switch {B b => b,C c => c,_ => throw new System.Exception()}

通常情况下,修复该问题需要添加强制转换,如:

A a1 = b ?? c;A a2 = x>0 ? b : c;

根据目标类型switch表达式提议,在每种情况下都允许编译器使用语句(A a1)的左侧来决定右侧(b ??c)应该返回的类型。该功能还可以用于返回语句(return b ??c),但不能用于变量(var a1 = b ??c)。

目前,这个(例 3)的模式匹配版本计划于 C# 8.0 中提供,其他两个则于 8.x 中提供。

允许在解构中使用“default”

根据该提议,这个小功能将允许在初始化元组时使用 default 关键字:

(int i, string s) = default;(i, s) = default;

过时的属性

与 Visual Basic 不同,C# 无法把单个 getter 和 setter 标记为过时。相反,只能将属性作为整体做这样的标记。该提议纠正了这种情况。为了理解这个问题的重要性,请看看 Cory Nelson 的评论。

就在几个星期前,我试图清理一些大量使用 get/set 属性的代码,使其成为一个更加只读的初始化的构造函数(ctor-initialized),此时我发现我真希望该特性是这样的。

4 月,该特性从 C# 9 迁移到了 C# 8 上。

结构上的只读成员

当分配给只读字段或用作 in 参数时,结构上的方法有个性能小问题。如果我们调用结构上的方法,编译器首先会生成防御性副本。尽管这通常不足以产生问题,但是,在用于紧密循环(tight loop)时,细微的低效的确会累积出性能问题。

对于完全不可变的结构,可以标记整个结构为只读,这样可以避免此类情况的发生。然而,出于性能的缘故,很多结构是可变的。

根据只读示例方法提议,开发人员将能够把单个方法标记为只读。这向编译器表明,防御性副本不是必要的,没有值会被修改。

这和Pure 属性不同,只要只读方法不修改结构本身的值,那么就有明显的副作用。

自动实现属性的 getter 将被自动认为是只读的。在某些情况下,setter 也可以被标记为只读。比如,当属性值存于字典中而不是直接存入结构本身的时候。

在目前的提议下,引用类型(类和接口)将不会受到该特性的支持。原因有三重:

  • 这么做,没有与性能相关的优势

  • 只读关键字不意味着状态不会改变,只是不会直接修改对象上的字段。

  • 这是只读结构的扩展,没有等效的只读类。

原文地址:https://www.infoq.cn/article/H9a_LecLcPwkQoWyTYNf


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 
640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SDOI2014】数表【莫比乌斯反演】【树状数组】

传送门 传送门 题意: TTT组询问给定n,m,an,m,an,m,a,求 ∑i1N∑j1M[(∑d∈N∗[d∣i][d∣j]d)≤a]∑d∈N∗[d∣i][d∣j]d\sum_{i1}^{N}\sum_{j1}^{M}[(\sum_{d \in N^*}[d\mid i][d \mid j]d)\leq a]\sum_{d \in N^*}[d\mid i][d \mid j]di1∑N​j1∑M​[(d∈N∗∑…

Codeforces Global Round 14 E. Phoenix and Computers 思维 + dp

传送门 文章目录题意:思路:题意: 有nnn台电脑,你可以手动打开某个电脑,如果第i−1,i1i-1,i1i−1,i1台电脑都打开了,那么第iii台电脑会自动打开。不能手动打开自动打开的电脑,问有多少种打开的方…

2021HDU多校第五场1004 Another String-双指针

https://acm.hdu.edu.cn/showproblem.php?pid7015 题意:对于每次以i来分割字符串,计算两个分割串的子串的k-匹配的数量。 思路:当我们计算到ans[i]是,我们可以当成从ans[i-1]加上【1-i】字符串和【i1,n】的k-匹配数量…

C# 默认接口方法更新完成,很多细节问题尚待解决

随着对默认接口方法的支持越来越接近完成,一些潜在的问题被提了出来。虽然已经完成了很多工作,但这是一个复杂的特性,许多细节问题还没有解决。但首先,这里有一些已解决的问题。接口允许使用 static 和 const 字段了。除 和! 之外…

【洛谷3768】简单的数学题【莫比乌斯反演】【杜教筛】【小学奥数】

传送门 题意:给定p,Np,Np,N,求 ∑i1N∑j1Nijgcd(i,j)modp\sum_{i1}^{N}\sum_{j1}^{N}ijgcd(i,j)\text{ }mod \text{ }pi1∑N​j1∑N​ijgcd(i,j) mod p ppp为质数,在1e91e91e9左右 N≤1e10N \leq 1e10N≤1e10 神仙题 前置芝士:杜教筛 懒得…

newcode Gene Tree 点分治

传送门 文章目录题意:思路:题意: 求一棵树的每对叶子节点之间距离平方的和。 思路: 这个题貌似可以容斥,但是我不会,所以我写了个淀粉质。 要知道,淀粉质的思想就是将子树内部的递归处理&…

2021HDU多校第九场1008HDU7073 Integers Have Friends 2. 随机化

HUD地址:https://acm.hdu.edu.cn/showproblem.php?pid7073 题目大意:选择数组中最多的数,使得他们模m同余(m>2)。求最大的数量。 思路:然后我们全选奇数或者全选偶数的话,那么我们的答案是…

一个引发程序员们干架的问题

这里是Z哥的个人公众号每周五早8点 按时送达当然了,也会时不时加个餐~我的第「77」篇原创敬上在一个分布式系统的开发团队中,有一些问题是很容易产生程序员之间矛盾的。其中之一就是「业务归属」,就是当新加/修改一个业务的时候&a…

newcode Islands 思维

传送门 文章目录题意:思路:题意: 给你两个圆,上面依次有nnn个点,编号为1−n1-n1−n的排列,给出一种连边方式,使得每个点都被遍历且连线不能相交,没有方式的话输出−1-1−1。 思路&…

微服务探索与实践—服务注册与发现

前言微服务从大规模使用到现在已经有很多年了,从之前的探索到一步步的不断完善与成熟,微服务已经成为众多架构选择中所必须面对的一个选项。服务注册与发现是相辅相成的,所以一般会合起来思索。其依托组件有很多,比如Zookeeper,Co…

快速沃尔什变换:从入门到背板(含推导过程)

前(che)言(dan) FWTFWTFWT是个神奇的东西。 然而网上多数讲解多数直接给结论,顶多用归纳法证一证。 所以本文会讲解FWTFWTFWT的推导过程。 虽然也用到了构造,但是好背得多 参考博客:https:/…

微服务探索与实践—总述

背景软件开发是一个不断发展的过程,从当初的面向过程为主到如今的面向对象的开发,软件开发者不断探索与实践更加符合时代发展要求的开发模式与架构思想,而这,也在极大程度上提高了软件开发的效率。微服务是一种架构模式或者说是架…

P4097 [HEOI2013]Segment 李超线段树

传送门 文章目录题意:思路:题意: 实现以下两个操作: (1)(1)(1)在平面上加入一条线段。记第iii条被插入的线段的标号为iii (2)(2)(2)给定一个数kkk,询问与直线xkxkxk相交的线段中,交点纵坐标最大的线段的编…

【CF1204D】Kirk and a Binary String【结论题】【LIS】

传送门 题意:给一个01串SSS,求一个等长的01串TTT SSS和TTT所有对应位置的子串最长不下降子序列长度(以下简称LIS\text{LIS}LIS)相同TTT中0的数量尽量多 ∣S∣≤100000|S| \leq 100000∣S∣≤100000 对于一个01串SSS,…

这周,全球首个IT技术全中文免费学习平台诞生了!太惊艳!

本周三的Developer Wednesday为大家揭秘了Microsoft Learn网站的全新学习模式一时间Microsoft Learn圈粉无数如果你正在为错过直播而暴风哭泣等一等,看这里!全程高清回播将为你持续解密这一次你一定不可以再错过了哦!什么是Microsoft Learn&…

【CF1182D】Complete Mirror【树的重心】

传送门 题意:给一棵NNN个结点的树,你需要钦定一个根,使得所有深度相同的点的度数相同。 N≤100000N \leq 100000N≤100000 用脑子想一想,就是根节点直接相连的子树都长得一模一样。 如果根节点度数大于1,我们发现它…

P1989 无向图三元环计数 思维 + 建图

传送门 文章目录题意:思路:题意: 统计无向图中三元环的个数。 思路: 很明显有一种暴力的方法,就是枚举每条边,让后再跑两个点的所有边,可以卡到复杂度O(m2)O(m^2)O(m2)。 我们可以考虑给点之…

十分钟了解Kubernetes

何为Kubernetes?最简单的一句话来概括Kubernetes。它就是一套成熟的商用服务编排解决方案。Kubernetes定位在Paas层,重点解决了微服务大规模部署时的服务编排问题。Kubernetes组件介绍了解Kubernetes都是从Pod开始的。Pod是Kubernetes最小的调度单元,所…

【CF1020C】Election【贪心】

传送门 题意:NNN个人给MMM个党派投票,开始时每个人选择一个党派投票(给定),每个人可以花费一定代价贿赂(每个人给定代价),求让1号党派胜出(票数严格最大)的最…

Codeforces Round #627 (Div. 3) E. Sleeping Schedule dp

传送门 文章目录题意:思路:题意: 给你一天hhh小时,初始时间是000,每天可以使时间aia_iai​或者ai−1a_i-1ai​−1,问最多可以让多少天的时间在[l,r][l,r][l,r]范围内。 思路: 算是个比较简单…