c# - c#中的discards有什么好处
问题描述
我刚刚在 c# 中遇到了丢弃,我想知道一些我觉得Microsoft Docs on Discards没有很好地解释的事情。
- 使用独立的丢弃是否只是为了可读性?如果我有一个返回结果的函数(不一定需要),比如说 a
bool
orint
,但也做了一些其他逻辑,那么当你可以简单地在赋值之外调用函数时,为什么要使用丢弃?
例如:
TcpClient client = new TcpClient();
NetworkStream nc = tcpClient.GetStream();
// what's the difference between
nc.Read(someBuffer, 0, someSize);
// and the discard
_ = nc.Read(someBuffer, 0, someSize);
他们不都只是丢弃结果吗?这看起来对我来说纯粹是一种偏好。
- 在微软关于丢弃的文档中,它不会减少内存分配是因为它们等同于未分配的变量吗?
- 如果有的话,丢弃的性能优势是什么,它只是一种旨在提高可读性的风格吗?
编辑:
更清楚地说:我只是好奇使用丢弃是否有任何潜在的性能优势。我提供的 Microsoft doc 链接指出“只有一个丢弃变量,并且该变量甚至可能不会被分配存储,丢弃可以减少内存分配”,在这种用例中(模式匹配,调用没有 out 的方法,元组解构和/或独立)是否减少了内存分配?
解决方案
一般来说,在这句话中使用discard是没有意义的:
_ = nc.Read(someBuffer, 0, someSize);
因为您可以忽略返回值。我从来没有人使用过独立的丢弃,但是文档涵盖了一些有用的特定情况。
当您必须提供变量但不需要它时使用丢弃。
正如所提供的文档页面中已经介绍的那样,丢弃对于以下内容非常有用:
模式匹配
switch (stream)
{
case MemoryStream _:
case FileStream _:
ProcessStream(stream);
break;
}
没有参数的方法
如果要检查是否可以将字符串解析为整数,但不关心结果:
if (int.TryParse(str, out _))
{
// do something
}
否则,您将不得不声明一个您不会使用并且会消耗一些内存的 out 变量。
解构
(_, _, area) = city.GetCityInformation(cityName);
如果没有丢弃,您会将结果解构为 3 个不同的变量,并且只使用其中一个。使用丢弃,代码具有更清晰的意图,并且在内存管理方面更无效。
推荐阅读
- vim - Vim 编码不适用于蒙古文文本
- sql - SQL Server 性能:加入或在哪里
- emacs - 如何将 jh 和 fd 映射到
在 Doom Emacs 中? - python - 来自 Django Rest Framework 的自定义错误不起作用
- maven - 使用 Nexus 代理存储库进行 Maven 打包时出错
- javascript - 如何注释掉 .Vue 模板中的 HTML 标签
- powershell - 通过数组employeenumber获取aduser
- javascript - 如何在 CSS 中响应式缩放元素
- blazor-server-side - 如何让 Blazor 客户端浏览器选择语言?(所以我可以在该客户端浏览器上使用正确的小数分隔符进行计算)
- firebase - 如果我同时更新用户子集合中的文档,我会达到 Firebase 限制吗?