使用C#7的foreach声明中的空合并运算符
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用C#7的foreach声明中的空合并运算符,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1493字,纯文字阅读大概需要3分钟。
内容图文
![使用C#7的foreach声明中的空合并运算符](/upload/InfoBanner/zyjiaocheng/759/eddcc5794d3f4abdb778f307f364316b.jpg)
我在C#7.0中查看this code示例,我不确定引擎盖下发生了什么以及此循环的性能.
foreach (var c in text ?? throw new ArgumentNullException(nameof(text)))
{
...
}
我的问题:
>条件语句是一次还是多次打击(打开
每次迭代)?
>新语法看起来不同,这样做有什么好处?
解决方法:
您应该了解foreach内部代码以了解此C#功能. foreach语句中表达式的右侧部分必须实现IEnumerable(< T>)接口,而整个循环在内部是一个简单的while,类似这样:
// here can be NullReferenceException
var en = text.GetEnumerator();
while(en.MoveNext())
{
var c = en.Current;
{
...
}
}
正如您所看到的,此代码中有一点可以发生NRE,因此您需要在整个循环或Enumerable extensions class之前检查可枚举,如下所示:
if (text.IsNullOrWhitespace())
{
throw new ArgumentNullException(nameof(text));
}
// while loop here or text.SomeLinqCodeHere()
这里有一些代码行并不是真的没必要,添加一些没有实际价值的熵.在简单的foreach的情况下,它确实是基于意见的关于代码标准的决定,但是这个功能的真正目的是将其与C#7中的其他新东西联系起来,如?. operator,如下所示:
int? length = customers?.Length ?? throw new ...;
Customer first = customers?[0] ?? throw new ...;
int? count = customers?[0]?.Orders?.Count() ?? throw new ...;
在这种情况下抛出异常类似于代码行末尾的注释:
int? length = customers?.Length; // should not be null
Customer first = customers?[0]; // should not be null
int? count = customers?[0]?.Orders?.Count(); // should not be null
但它为您的代码添加了一些严格的类似合同的规则.
至于具有这种表达式的foreach循环的性能,正如已经说过的那样,它不会受到影响,因为枚举器只出现一次,并且在真正的循环之前.
内容总结
以上是互联网集市为您收集整理的使用C#7的foreach声明中的空合并运算符全部内容,希望文章能够帮你解决使用C#7的foreach声明中的空合并运算符所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。