转载 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:什么是丢弃物以及如何使用它们的更多相关文章

  1. Harry Potter and the Order of the Phoenix

    书名:Harry Potter and the Order of the Phoenix 作者:J.K. Rowling 篇幅: 870P 蓝思值:950L 用时: 22天 工具: 有道词典 [透析成 ...

  2. [.Net] 手把手带你将自己打造的类库丢到 NuGet 上

    手把手带你将自己打造的类库丢到 NuGet 上 序 我们习惯了对项目右键点击“引用”,选择“管理NuGet 程序包”来下载第三方的类库,可曾想过有一天将自己的打造的类库放到 NuGet 上,让第三者下 ...

  3. 【前端优化之渲染优化】大屏android手机动画丢帧的背后

    前言 上周我与阿里的宇果有一次技术的交流,然后对天猫H5站点做了一些浅层次的分析,后面点时间基本天天都会有联系,中途聊了一些技术细节.聊了双方团队在干什么,最后聊到了前端优化.因为我本身参与了几次携程 ...

  4. Netty_UDP丢包解决

    程序背景 程序是Java编写,基于Netty框架写的客户端及服务端. 现象 客户端大数据量持续发UDP数据,作为UDP服务器出现了部分数据频繁丢失触发程序自身重传逻辑. 通过GC日志对比发现丢包的时间 ...

  5. ActiveMQ_Mqtt的TCP丢包

    现象 Mqtt Consumer应该收到的消息少于预期,登录ActiveMQ的管理页面里的Topics,查看Messages Enqueued发现同样少于理应接收的数量. 定位问题 怀疑是TCP丢包, ...

  6. 浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)

    UDP数据包长度 UDP数据包的理论长度 udp数据包的理论长度是多少,合适的udp数据包应该是多少呢?从TCP-IP详解卷一第11章的udp数据包的包头可以看出,udp的最大包长度是2^16-1的个 ...

  7. TCP通信丢包原因总结

    今天在公司问老大,公司的项目底层,是使用的TCP,因为可靠,自动断线重连,在底层都实现了,但是我记得TCP也会有掉包的问题,所以这文章就诞生了——关于TCP掉包的问题,TCP是基于不可靠的网络实现可靠 ...

  8. UDP主要丢包原因及具体问题分析

    UDP主要丢包原因及具体问题分析 一.主要丢包原因   1.接收端处理时间过长导致丢包:调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这二次调用间隔里,发过来 ...

  9. 发生tcp丢包(拥堵、超时)重传

    可以根据wireshark的Seq序列号和Ack序列号来进行详细分析. 可见,网络丢包(可能是网络拥堵.也有可能是骨干网上有"防火墙"故意随机丢包,因为这个服务器的IP放在国外)对 ...

随机推荐

  1. 洛谷P1373 小a和uim之大逃离【线性dp】

    题目:https://www.luogu.org/problemnew/show/P1373 题意: 有一个n*m的地图,每个点上有一个数值.两个人在任一点开始任一点结束,只能往右或往下走,轮流收集数 ...

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

  3. git 在eclipse中忽略上传文件

    在我们的工程项目中,有些文件是不需要上传到服务器上的,比如那些 */target/ */bin/*.settings/*.classpath*.gitignore*.project 我们将这些文件添加 ...

  4. 6、获取Class中的方法

    6.获取Class中的方法 6.1 getMethods() 获取的都是共有的方法(包括父类) 返回包含一个数组 方法对象反射由此表示的类或接口的所有公共方法 类对象,包括那些由类或接口和那些从超类和 ...

  5. 多线程爬取猫眼电影TOP100并保存到mongo数据库中

    import requests import re import json from requests.exceptions import RequestException from multipro ...

  6. Activiti工作流学习(一)——Activiti服务类

    Activity有9个service1.DynamicBpmnService动态Bpmn服务Service providing access to the repository of process ...

  7. RabbitMq、ActiveMq、Kafka和Redis做Mq对比

    转载自:https://blog.csdn.net/qiqizhiyun/article/details/79848834 一.RabbitMq RabbitMQ是一个Advanced Message ...

  8. webservice应用+建议不用webservice

    webservice应用 1.分布式应用的集成(应用程序之间的集成) 2.软件重用 将一个软件的功能以webservice方式暴露出来,达到软件重用.例如上边分析天气预报,将天气查询功能以webser ...

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

  10. strom部署问题

    1.storm 引用的 kafka和线上的kafka版本不一致 2.bolt的prepare初始化elasticsearch连接慢,导致第一次处理数据是总是有问题storm调用prepare方法是异步 ...