C# 8小特性

对于C# 8,有吸引了大多数注意力的重大特性,如默认接口方法和可空引用,也有许多小特性被考虑在内。本文将介绍几例可能加入C#未来版本的小特性。

新的赋值运算符:&&=和||=

从第一个版本开始,C#就支持把等号和另外一种运算符合在一起的语法。这几乎包括除短路布尔运算符&&和||之外的所有的二元操作符(如+、-、&等)。“赋值运算符&&=和||=”提案是对这个列表的补充。

逐字内插字符串

逐字字符串以@"开头。内插字符串使用$"。但是,如果你想要一个既逐字又内插的字符串呢?是用@$"还是$@"?目前,其中一个有效,另一个会报编译器错误,但是,人们通常很难记住哪个是哪个。

在一个名为“逐字插入字符串”的中肯提案中,该语法将得到扩展,接受@$"。对它的解释将和逐字插入字符串($@")完全相同,因此,你再也不用担心弄反了。

关于这项修改,存在一些小争议,因为有人认为这没有必要或者会导致不一致。

允许using语句结构匹配IDisposable

接口与C#编译器之间存在着奇怪的关系。经常,你不必为了使用一个语言特性而真正实现一个具体的抽象接口;你只需在类似抽象接口的类上创建一个公开的API。

典型的例子是“foreach”和IEnumerable。如果类有一个方法GetEnumerator,返回一个包含Current属性和MoveNext方法的对象,那么你就可以使用foreach。实际的返回类型不重要,这使得List<T>这样的类似可以实现更快速的枚举器。这通常称为“结构匹配(structural matching)”。

在这个提案中,using语句也将支持结构匹配。这乍看之下没什么用,因为你不会希望看到一个可释放类没有实现IDisposable。不过,有一种名为ref struct的新类型。它们不能实现接口,因此,如果没有这项提案,你在使用它们时就无法使用using语句。

和foreach与using共用的扩展方法

这个提案是前述提案的补充,是为了能够把GetEnumerator或Dispose作为扩展方法添加,并且可以分别和“foreach”或“using”共用。再次,我们谈论的这项特性仅用于非常特殊的情况。例如,你可以从第三方库(这可能是调用Marshal.ReleaseComObject的好地方)向一个COM对象添加一个Dispose扩展方法。

这还不是一个正式的提案,可能会合并到前面提到的“using”语句修改中。

“using”语句隐式作用域

目前,“using”语句后面只能是一个显式作用域(即一对花括号)或者另一个“using”语句。如果这个提案通过,你就可以编写下面这样的代码:

using var a = new MyDisposable();
using var b = new MyDisposable();
using var c = new MyDisposable();

上述每个变量都会在当前作用域结束时以相反的顺序自动释放。从功能上说,这和下面的代码等价,但更简洁,也不会引入新作用域。

using (var a = new MyDisposable())
using (var b = new MyDisposable())
using (var c = new MyDisposable())
{// 一些代码
}

当需要多个可释放对象而又不同时创建时,这项修改会特别有用。你甚至可以在表达式中间创建可释放对象,而且可以确信,它将在当前作用域结束时释放。

var results = myExcelReader.ReadResults(
                        using new MyExcelSheet(excelFilePath));

对于这项提案,其中一个批评是,它与某些语句如“goto”不兼容。

相关文章:

  • C# 8中的Async Streams

原文地址: http://www.infoq.com/cn/news/2018/09/csharp-8-small-features


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

640?wx_fmt=jpeg

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

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

相关文章

[HAOI2016]字符合并(ing)

[HAOI2016]字符合并 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 有一个长度为 n 的 01 串&#xff0c;你可以每次将相邻的 k 个字符合并&#xff0c;得到一个新的字符并…

AtCoder Beginner Contest 174 总结

这次做了ABDF。我也不知道我怎么做的&#xff08;乱做-.- A - Air Conditioner 签到题1 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include<iostream> #…

【KMP】周期长度和(luogu 3435/ybtoj KMP-3)

正题 luogu 3435 ybtoj KMP-3 题目大意 定义S的proper前缀为S中非空且len<|S|的前缀&#xff0c;若Q是A的proper前缀&#xff0c;且A是QQ的前缀 现在问你字符串S所有前缀的最大周期之和 解题思路 如上图&#xff0c;对于一个字符串S&#xff0c;如果有周期Q&#xff0c;那…

P6097-[模板]子集卷积

正题 题目链接:https://www.luogu.com.cn/problem/P6097 题目大意 长度为2n2^n2n的序列a,ba,ba,b求一个ccc满足 ck∑i∣jk,i&j∅aibjc_k\sum_{i|jk,i\&j\varnothing}a_i\times b_jck​i∣jk,i&j∅∑​ai​bj​ 解题思路 从炫酷反演魔术过来的&#xff0c;顺便写…

dotnet core 开发无缝兼容Http和Websocket协议的接口服务

在应用接口开发中往往要针对不同协义开发相应的代理服务&#xff0c;但对于Websocket和http这两种协议来说就有些不同&#xff0c;从实现上来看Websocket可以说是Http的升级子协议&#xff0c; 两者在协议处理上基本一致&#xff0c;具体可以在解释Body上有所不同。FastHttpApi…

【KMP】子串拆分(ybtoj KMP-4)

正题 ybtoj KMP-4 题目大意 给出字符串S&#xff0c;问你有多少个子串满足ABA的形式&#xff0c;且∣A∣⩾k,∣B∣⩾1|A|\geqslant k,|B|\geqslant 1∣A∣⩾k,∣B∣⩾1 解题思路 可以先枚举左端点&#xff0c;然后跑KMP&#xff0c;使其满足左右两个A&#xff0c;然后判断A,…

[SDOI2008]SUE的小球

[SDOI2008]SUE的小球 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 Sue和Sandy最近迷上了一个电脑游戏&#xff0c;这个…

Codeforces Round #661 (Div. 3)

A - Remove Smallest 排个序&#xff0c;如果相邻的数大于一就不满足题意 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include<iostream> #include<alg…

centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试)

写个demo来玩一玩linux平台下使用lldb加载sos来调试netcore应用。当然&#xff0c;在真实的产线环境中需要分析的数据和难度远远高于demo所示&#xff0c;所以demo的作用也仅仅只能起到介绍工具的作用。通常正常情况下&#xff0c;分析个几天才能得出一个结论的的结果都还是比较…

P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】

除了最后一题都比较简单就写一起了 P4450-双亲数 题目链接:https://www.luogu.com.cn/problem/P4450 题目大意 给出A,B,dA,B,dA,B,d求有多少对(a,b)(a,b)(a,b)满足gcd(a,b)dgcd(a,b)dgcd(a,b)d且a∈[1,A],b∈[1,B]a\in[1,A],b\in[1,B]a∈[1,A],b∈[1,B] 解题思路 很显然的…

【Trie】最大异或对(ybtoj Trie-2)

正题 ybtoj Trie-2 题目大意 给你n个数&#xff0c;选择2个&#xff0c;使其异或值最大 解题思路 对于每个数的二进制建立Trie&#xff0c;然后每个数在Trie中搜索&#xff0c;每次尽量走不同方向 代码 #include<cstdio> #include<cstring> #include<iostrea…

[SCOI2003]字符串折叠

[SCOI2003]字符串折叠 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 折叠的定义如下&#xff1a; 一个字符串可以看成它自身的折叠。记作S S X(S)是X(X>1)个S连接在一…

Codeforces Round #662 (Div. 2)

就写了两个题&#xff0c;以为要掉分&#xff0c;结果早上起来发现还上分了&#xff08;说明wtcl A - Rainbow Dash, Fluttershy and Chess Coloring 无论边长是奇数还是偶数&#xff0c;考虑每次操作最外层的一圈&#xff0c;一个人操作一圈的一般&#xff0c;然后另一个人就…

.NET微服务方案调查

.NET Core就是专门针对模块化的微服务架构而设计&#xff0c;调查下大家选择.NET微服务情况&#xff0c;如果你有微服务方面的需求可以找我哦&#xff0c;可加我微信geffzhang&#xff1a;相关文章&#xff1a;Service Fabric 与Ocelot 的集成Ocelot简易教程&#xff08;二&…

Loj#116-[模板]有源汇有上下界最大流

正题 题目链接:https://loj.ac/p/116 题目大意 nnn个点mmm条边的一张图&#xff0c;每条边有流量上下限制&#xff0c;求源点到汇点的最大流。 解题思路 先别急着求上面那个&#xff0c;考虑一下怎么求无源点汇点的上下界可行流。 可以考虑先把下限流满&#xff0c;这样就会…

【Trie】最长异或路径(ybtoj Trie-3/luogu 4551)

正题 ybtoj Trie-3 luogu 4551 题目大意 给你一棵树&#xff0c;让你找一条路径&#xff0c;使这条路径的亦或值最大 解题思路 对于每个数存下到根节点的亦或值&#xff0c;然后拿这些数去Trie中跑最大亦或 因为相同部分亦或后为0&#xff0c;所以得出结果就是最大路径亦或…

Codeforces Round #663 (Div. 2)

2020/8/9晚上断网了&#xff0c;本来不想打就顺便看看题目&#xff0c;发现能做几个&#xff0c;然后就交了。&#xff08;做完1、2两题才敢交&#xff09;最终做了3个题tcl。 A - Suborrays 脑筋急转弯题目。位运算OR运算结果只会变大不会变小&#xff0c;直接正序输出就可 …

【每日一题】7月16日题目精讲—点权和

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld题目描述 给你一棵树&#xff0c;最开始点权为0&#xff0c;每次将与一个点x树上距离<1的所…

中国开源年会 COSCon 2018 今起接受报名!

大会官网二维码名片&#xff1a;点击文末左下角阅读原文&#xff0c;直达报名链接写在大会前开源 20 年&#xff0c;我们遇到了什么问题&#xff1f;‍围绕开源的方式来开发软件项目&#xff0c;正在走向业界的主流。随着开源的崛起&#xff0c;相应的问题也来了&#xff1a;Re…

【Trie】阅读理解(luogu 3879/ybtoj Trie-4)

正题 luogu 3879 ybtoj Trie-4 题目大意 给你n篇文章&#xff0c;还有m个单词&#xff0c;问你这些单词在哪几篇文章中出现过 解题思路 对文章中的单词建Trie&#xff0c;然后那查询的单词去匹配 代码 #include<map> #include<vector> #include<cstdio> …