关于布尔类型List的FindAll Lambda表达式逻辑疑问
问题解答
首先明确List.FindAll()的核心逻辑:它会遍历集合中的每个元素,将元素传入你提供的Lambda表达式,只有当Lambda返回true时,该元素才会被保留到结果列表中。
关于x => x的含义
因为allValues是List<bool>,Lambda里的x本身就是布尔类型的值。x => x这个表达式并没有做任何“相等判断”,它的作用就是直接返回当前元素x的布尔值:
- 当
x为true时,Lambda返回true,该元素会被FindAll保留; - 当
x为false时,Lambda返回false,该元素会被过滤掉。
对比你理解的写法
你提到的hobby => x.Equals(true)(这里存在笔误,正确写法应为hobby => hobby.Equals(true)),其实和x => x是完全等价的:
- 当
hobby为true时,hobby.Equals(true)返回true,元素被保留; - 当
hobby为false时,hobby.Equals(true)返回false,元素被过滤。
本质上这两种写法都是在判断元素本身是否为true,只是前者的写法更简洁。
如果需要筛选出所有false值,只需把Lambda改成x => !x——当x为false时,!x返回true,对应元素就会被保留下来。
内容的提问来源于stack exchange,提问作者Francky
相关产品推荐
相关产品推荐

