如何以最优雅的方式编写一个始终返回"true"的 C# lambda 函数?

20 浏览
0 Comments

如何以最优雅的方式编写一个始终返回"true"的 C# lambda 函数?

我想调用Queryable.Where()并获取所有元素。没有一个不需要谓词函数的版本的Where()。所以我必须写成这样:

 var result = table.Where( x =>  true );

它能工作,但我觉得这样很愚蠢 - x从未被使用,并且=>箭头符号没有被“转换”。

有更优雅的解决方案吗?

0
0 Comments

C#中的lambda表达式是一种简洁的语法,用于创建匿名函数。lambda表达式可以在LINQ查询中使用,用于筛选、排序和转换数据。然而,有时候我们需要编写一个lambda表达式,始终返回"true"。下面的内容讨论了这个问题的原因和解决方法。

首先,table.Where(x => true)并不是"返回所有元素"。它只是返回一个可枚举对象,当对它进行枚举时,它才会提供一些元素的子集。在没有进行枚举之前,没有元素被"返回"。

而且,在这种情况下,这个子集甚至不是一个真子集(即返回所有元素),所以这实际上是一个无操作。

要枚举所有元素,可以写一个简单的foreach循环,或者使用ToListToArray,如果你不关心实际返回任何元素(只是想进行枚举,可能是为了副作用),可以使用table.All(x => true)table.Any(x => false),甚至只是table.Count()

0
0 Comments

问题的出现原因:提问者想要知道如何以最优雅的方式编写一个C# lambda表达式,使其始终返回true。

解决方法:可以使用table.Where(_=> true);来实现。这样做的效果实际上等同于一个空操作。也可以使用for (var item in table) { if (true) { yield item; }}来实现,但这样做并没有实际意义。

提问者的问题实际上是在询问x => true看起来像一个空操作的原因。回答者通过代码解释了这个问题,并提供了使用_ => true来代替x => true的建议。回答者还解释了将变量名从x改为_的做法是一种惯用的写法。

最后,提问者认为回答者的解释对于新手来说是有帮助的,并赞成了回答者的观点。

0
0 Comments

问题:如何以最优雅的方式编写一个始终返回“true”的C# lambda表达式?

原因:在编写C#代码时,有时候我们需要编写一个lambda表达式,其始终返回true。这可能是因为我们需要对一个集合进行筛选,但是不需要具体的筛选条件,只需要返回集合中的所有元素。

解决方法:以下是一种更优雅的解决方法:

var result = table;

你也可以完全省略result变量,并直接使用table:

table

0