gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:48:06 25 4
gpt4 key购买 nike

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

    关于c# - 在C#中丢弃的优点是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55693693/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com