C#7:什么是丢弃物以及如何使用它们
转载 http://www.devsanon.com/c/using-discards-feature-of-c-7
假设您希望调用一个具有返回值并且也接受out变量的方法,但是您不希望使用将要返回的out变量的内容。
到目前为止,我们正在创建一个虚拟变量,以后将不会使用它或将其丢弃。
使用C#7,您现在可以使用“ 丢弃”
丢弃是局部变量,可以为它们分配一个值,并且该值无法读取(丢弃)。本质上,它们是“只写”变量。
这些丢弃没有名称,而是用_(下划线)表示。
因此,让我们来看下面的示例。
假设我们有一个整数的ConcurrentQueue,我们希望从中出队某些东西,而实际上没有使用它。
int outDummy;
if(m_myQueue.TryDequeue(out outDummy))
{
//do something here
}
else
{
//do something else here
}
现在,使用C#7,我们可以利用丢弃。
if(m_myQueue.TryDequeue(out _))
{
//do something here
}
else
{
//do something else here
}
并且已出列的值将不会也无法使用。
例如下面的代码
int x = 0;
if(m_myQueue.TryDequeue(out _))
{
x = _;
}
将不会编译,也不会出现在IntelliSense中。
但是请记住,由于_是上下文关键字,因此如果您使用名称_声明变量,则将使用该变量。
int x = 0;
int _;
if(m_myQueue.TryDequeue(out _))
{
x = _;
}
在上面的代码中,将从队列中删除的值将分配给变量x,因为在上述情况下,下划线用作变量而不是丢弃。
结论
C#中的丢弃功能提供了一种忽略某些局部变量的方法,这是设计时的功能。
在运行时,可能需要一个变量,并且编译器可能会为其生成一个名称。
由于_关键字是上下文关键字,因此您需要设置代码策略,以避免使用名称_声明局部变量,以减少混淆。
此功能与.NET平台的早期版本兼容,因为它不需要更改CLR。
C#7:什么是丢弃物以及如何使用它们的更多相关文章
- Harry Potter and the Order of the Phoenix
书名:Harry Potter and the Order of the Phoenix 作者:J.K. Rowling 篇幅: 870P 蓝思值:950L 用时: 22天 工具: 有道词典 [透析成 ...
- [.Net] 手把手带你将自己打造的类库丢到 NuGet 上
手把手带你将自己打造的类库丢到 NuGet 上 序 我们习惯了对项目右键点击“引用”,选择“管理NuGet 程序包”来下载第三方的类库,可曾想过有一天将自己的打造的类库放到 NuGet 上,让第三者下 ...
- 【前端优化之渲染优化】大屏android手机动画丢帧的背后
前言 上周我与阿里的宇果有一次技术的交流,然后对天猫H5站点做了一些浅层次的分析,后面点时间基本天天都会有联系,中途聊了一些技术细节.聊了双方团队在干什么,最后聊到了前端优化.因为我本身参与了几次携程 ...
- Netty_UDP丢包解决
程序背景 程序是Java编写,基于Netty框架写的客户端及服务端. 现象 客户端大数据量持续发UDP数据,作为UDP服务器出现了部分数据频繁丢失触发程序自身重传逻辑. 通过GC日志对比发现丢包的时间 ...
- ActiveMQ_Mqtt的TCP丢包
现象 Mqtt Consumer应该收到的消息少于预期,登录ActiveMQ的管理页面里的Topics,查看Messages Enqueued发现同样少于理应接收的数量. 定位问题 怀疑是TCP丢包, ...
- 浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)
UDP数据包长度 UDP数据包的理论长度 udp数据包的理论长度是多少,合适的udp数据包应该是多少呢?从TCP-IP详解卷一第11章的udp数据包的包头可以看出,udp的最大包长度是2^16-1的个 ...
- TCP通信丢包原因总结
今天在公司问老大,公司的项目底层,是使用的TCP,因为可靠,自动断线重连,在底层都实现了,但是我记得TCP也会有掉包的问题,所以这文章就诞生了——关于TCP掉包的问题,TCP是基于不可靠的网络实现可靠 ...
- UDP主要丢包原因及具体问题分析
UDP主要丢包原因及具体问题分析 一.主要丢包原因 1.接收端处理时间过长导致丢包:调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这二次调用间隔里,发过来 ...
- 发生tcp丢包(拥堵、超时)重传
可以根据wireshark的Seq序列号和Ack序列号来进行详细分析. 可见,网络丢包(可能是网络拥堵.也有可能是骨干网上有"防火墙"故意随机丢包,因为这个服务器的IP放在国外)对 ...
随机推荐
- 洛谷P1373 小a和uim之大逃离【线性dp】
题目:https://www.luogu.org/problemnew/show/P1373 题意: 有一个n*m的地图,每个点上有一个数值.两个人在任一点开始任一点结束,只能往右或往下走,轮流收集数 ...
- Educational Codeforces Round 74 (Rated for Div. 2) B. Kill 'Em All
链接: https://codeforces.com/contest/1238/problem/B 题意: Ivan plays an old action game called Heretic. ...
- git 在eclipse中忽略上传文件
在我们的工程项目中,有些文件是不需要上传到服务器上的,比如那些 */target/ */bin/*.settings/*.classpath*.gitignore*.project 我们将这些文件添加 ...
- 6、获取Class中的方法
6.获取Class中的方法 6.1 getMethods() 获取的都是共有的方法(包括父类) 返回包含一个数组 方法对象反射由此表示的类或接口的所有公共方法 类对象,包括那些由类或接口和那些从超类和 ...
- 多线程爬取猫眼电影TOP100并保存到mongo数据库中
import requests import re import json from requests.exceptions import RequestException from multipro ...
- Activiti工作流学习(一)——Activiti服务类
Activity有9个service1.DynamicBpmnService动态Bpmn服务Service providing access to the repository of process ...
- RabbitMq、ActiveMq、Kafka和Redis做Mq对比
转载自:https://blog.csdn.net/qiqizhiyun/article/details/79848834 一.RabbitMq RabbitMQ是一个Advanced Message ...
- webservice应用+建议不用webservice
webservice应用 1.分布式应用的集成(应用程序之间的集成) 2.软件重用 将一个软件的功能以webservice方式暴露出来,达到软件重用.例如上边分析天气预报,将天气查询功能以webser ...
- tar遇到error:"Error exit delayed from previous errors"的几种可能原因
1.使用root用户解压压缩包 2.赋予权限,sudo chmod 777 xxx.tar.gz 参考: https://blog.csdn.net/iamwrr/article/details/49 ...
- strom部署问题
1.storm 引用的 kafka和线上的kafka版本不一致 2.bolt的prepare初始化elasticsearch连接慢,导致第一次处理数据是总是有问题storm调用prepare方法是异步 ...