在 C# Linq 查询中丢弃

我想知道根据https://learn.microsoft.com/en-us/dotnet/csharp/discards在 Linq 查询中使用 Discards 是否是好的模式,例如:

public bool HasRedProduct => Products.Any(_=>_.IsRed == true);

什么是优点/缺点而不是使用

public bool HasRedProduct => Products.Any(x=>x.IsRed == true);


函数式编程
浏览 160回答 3
3回答

慕码人8056858

这不是丢弃 - 它是一个名为 的 lambda 表达式参数_。落入文章后面的注释:请注意,这_也是一个有效的标识符。当在受支持的上下文之外使用时,_不被视为丢弃,而是被视为有效变量。你可以说它不是丢弃,因为它的值没有被丢弃——你在 lambda 表达式的其余部分使用它。当您使用该值时,我强烈反对将_用作 lambda 表达式参数名称。当你想丢弃它时,它可以用作参数名称,即使从语言的角度来看它在技术上不是丢弃。为丢弃物选择这个名称正是因为它已经在实践中使用了。__

泛舟湖上清波郎朗

这些下划线只是命名_为 C# 6 中的 lambda 参数。它们不是丢弃项。在某些新上下文(例如,变量声明)和一些现有上下文(例如,赋值_ = expression;)中丢弃 C# 7 中引入的位置。在后一种情况下,下划线的 C#6 解释(如果存在)胜出,以尊重向后兼容性。丢弃是可以分配给但不能读取的变量。他们没有名字。相反,它们由“_”(下划线)表示。在 C#7.0 中,它们可以出现在以下上下文中:out 变量声明,例如bool found = TryGetValue(out var _)orbool found = TryGetValue(out _)解构作业,例如(x, _) = deconstructable;解构声明,例如(var x, var _) = deconstructable;是模式,例如x is int _开关/案例模式,例如case int _:丢弃物的主要表示形式是_声明表达式中的(下划线)标记。例如,int _在 out 变量声明或var (_, _, x)解构声明中。丢弃的第二种表示是使用表达式_作为 的简写var _,当命名_的变量不在范围内时。输出变量、解构赋值和声明以及普通赋值 ( _ = IgnoredReturn();) 中都允许使用它。但是,在 C#7.0 模式中不允许这样做。当命名的变量_确实存在于作用域中时,表达式_只是对该变量的引用,就像它在早期版本的 C# 中所做的那样。https://github.com/dotnet/roslyn/blob/master/docs/features/discards.md

斯蒂芬大帝

丢弃,它们是临时的虚拟变量,有意在应用程序代码中不使用。Discards相当于未赋值的变量;他们没有价值。因为只有一个丢弃变量,而且该变量甚至可能没有分配存储空间,所以丢弃可以减少内存分配。因为它们使您的代码的意图清晰,所以它们增强了代码的可读性和可维护性。这意味着这些变量不会在您的代码中使用,并且按照编写的那样,它们没有价值。所以你的查询应该抛出空引用异常(因为那_是未分配的
打开App,查看更多内容
随时随地看视频慕课网APP