C#中丢弃的优点是什么 - c#

我刚刚遇到过C#中的丢弃,并且想知道我觉得Microsoft Docs on Discards解释不佳的几件事。

使用独立的丢弃程序仅仅是为了提高可读性吗?如果我有一个返回结果的函数(不一定需要返回结果),假设是一个boolint,但是还执行了其他一些逻辑,那么当您可以简单地在一个函数的外部调用该函数时,为什么要使用丢弃函数?分配?

例如:

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有关丢弃的文档中,它会减少内存分配,这是因为它们等同于未分配的变量?
如果有的话,丢弃在性能上有什么好处,这仅仅是一种旨在提高可读性的风格设计?

编辑:

更清楚地说:我很好奇使用丢弃是否有任何潜在的性能优势。我提供的Microsoft doc链接指出“只有一个丢弃变量,并且可能甚至没有为该变量分配存储,丢弃可以减少内存分配”,在这种情况下(模式匹配,对方法的调用,out的调用,元组的解构)和/或独立)是否减少了内存分配?

参考方案

通常,在此句子中使用“丢弃”是没有意义的:

_ = 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个不同的变量,并仅使用其中之一。使用丢弃时,代码的意图更简洁,并且在内存管理方面更加无效。

ImageIO.read()是否考虑了EXIF方向元数据? - java

在JPEG图像中,有时会包含EXIF元数据,并告知应以什么方向显示图像。问题是,Java的ImageIO.read()在读取JPEG图像时是否将EXIF考虑在内,并自动应用转换。更具体地说,如果我使用Java的ImageIO将带有EXIF的JPEG图像转换为PNG图像,PNG图像的方向是否正确?还是下面的代码将在不考虑EXIF方向说明的情况下生成PNG图像?…

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

从iPython运行ga.read_ga问题 - python

从iPython Notebook运行代码时遇到了问题。这是运行的代码:import pandas.io.ga as ga import gflags df = ga.read_ga(['visits', 'avgTimeOnSite'], dimensions=['date', 'hou…

套接字InputStream块在available()/ read()上 - java

我正在阅读Socket InputStream,调用read()和available()可以进行几次循环迭代。以后的available()会无限期阻塞!可能是什么问题?我该如何使它不受阻碍?码:BufferedInputStream buffIn = new BufferedInputStream(in); while (true) { if (buffIn…