在 C# 中为 return 方法使用丢弃

Using discards in C# for return methods

在 C# 中使用丢弃有任何性能优势吗?在 Visual Studio 2019 年,编辑建议对未使用 returned 值的 return 类型方法使用丢弃。

据我所知,使用丢弃物几乎没有什么好处。它与未分配的变量相同,因此减少内存使用量是一个好处。好处有多大,不得而知。 Visual Studio 也一直建议我使用丢弃,但我只是从弹出窗口中抑制了该消息。

根据MSDN

Discards which are temporary, dummy variables that are intentionally unused in application code. Discards are equivalent to unassigned variables; they do not have a value. Because there is only a single discard variable, and that variable may not even be allocated storage, discards can reduce memory allocations.

如您所见,您可以减少内存使用量,因为它们可能未被分配。但确切的行为取决于代码的上下文。

丢弃的主要用例是元组,switch表达式中的模式匹配

switch (obj)
{
     case SomeType someTypeValue:
        ...
        break;
     case null:
        ...
        break;
     case object _:
        ...
        break;
}

具有 out 个参数的方法

if (int.TryParse(s, out _))
{    
}

并根据需要忽略方法 _ = Task.Run(() => {...}); 中的 return 值。

在干净的代码方面也有很大的可用性好处。通过使用丢弃 _ 表示 return 值未使用

嗯。视情况而定。

(1) 没有丢弃,你需要这样的东西:

            string foo = "fish";
            bool parsingok2 = Double.TryParse(foo, out double res);

(2) 有了discards就更容易写了:

            string foo = "fish";
            bool parsingok1 = Double.TryParse(foo, out _);

所以。如果编译器很聪明并且注意到 (1) 中的 res 从未使用过,它可以自动构建类似 (2) 的代码。据我所知,编译器非常聪明。

在那个例子中,看反汇编代码和我一样,所以真的没有区别。