我正在使用
a_list.All(item => !(item.field_is_true == true))
Run Code Online (Sandbox Code Playgroud)
哪个效果很好,但我想知道是否有一个合适的LINQ方法来做相反的事情.
Ere*_*mez 24
All()检查给定Predicate是否为所有项返回true.在框架开发方面,编写一个单独的方法来检查给定的Predicate是否为所有项返回false是没有任何意义的,因为它很容易"不"一个谓词.但是,您可以编写自己的扩展方法:
public static bool None<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
return !source.Any(predicate);
}
Run Code Online (Sandbox Code Playgroud)
完全相反的All()基本上是None,但由于LINQ没有None()方法,你可以通过完成相同的结果!set.Any().
!a_list.Any(item => !(item.matches == true))
Run Code Online (Sandbox Code Playgroud)
true如果a_list中的所有项都没有matches值,则会产生这种情况.
这个双重否定有点令人困惑,所以提供一个更简单的例子:
names.All(item => item.StartsWith("R"))
Run Code Online (Sandbox Code Playgroud)
如果所有项目都names以R开头(如您所知),则为true .
!names.Any(item => item.StartsWith("R"))
Run Code Online (Sandbox Code Playgroud)
如果没有names以R开头的项目,则为true
根据您在下面的评论,听起来您可能正在寻找一种方法来完成与当前代码片段相同的结果,但方式不同.这应该提供与当前代码相同的结果,但没有!谓词中的:
!a_list.Any(item => item.matches == true)
Run Code Online (Sandbox Code Playgroud)
这可以进一步简化为:
!a_list.Any(item => item.matches)
Run Code Online (Sandbox Code Playgroud)
我想你的也可以简化,对此:
a_list.All(item => !item.matches)
Run Code Online (Sandbox Code Playgroud)
很少有理由明确地将布尔值与trueor 进行比较false.
| 归档时间: |
|
| 查看次数: |
2719 次 |
| 最近记录: |