在C#Linq查询中丢弃

bos*_*ski 5 c# linq c#-7.0

我想知道根据https://docs.microsoft.com/zh-cn/dotnet/csharp/discards在Linq查询中使用Discards是否是一个好模式,例如:

public bool HasRedProduct => Products.Any(_=>_.IsRed == true);
Run Code Online (Sandbox Code Playgroud)

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

public bool HasRedProduct => Products.Any(x=>x.IsRed == true);
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 14

那不是丢弃-这是一个名为的lambda表达式参数_。它属于本文后面的注释:

请注意,这_也是一个有效的标识符。在受支持的上下文之外使用时,不_被视为丢弃,而是被视为有效变量。

您可以说这不是丢弃,因为它的值没有被丢弃 -您在其余的lambda表达式中使用了它。我强烈不鼓励使用_,当你作为一个lambda表达式参数名称使用值。它的优良使用_,当你作为一个参数名称到,虽然放弃它,即使它不是技术上从语言的角度丢弃。_之所以选择这个名称是因为它实际上已被使用。

  • @Sinatr:这意味着直接分配给_而不是将其声明为局部变量。例如,`_ = 5;`中没有`_`的其他对象将被丢弃。int _ = 5;是常规的局部变量声明。但是可以在LINQ中使用*丢弃*-例如,您可以使用`.Where(text => int.TryParse(text,out _))`过滤掉无法解析为整数的字符串。 (5认同)