我目前正在使用
a_list.All(item => !(item.field_is_true == true))
这个方法很有效,但我想知道是否有一个适当的LINQ方法来执行所有相反的操作。
All() 用于检查给定的 Predicate 是否对所有项返回 true。在框架开发方面,编写一个单独的方法来检查给定的 Predicate 是否对所有项返回 false 是没有意义的,因为“not”一个 Predicate 很容易。 但是,您可以编写自己的扩展方法:
public static bool None<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
return !source.Any(predicate);
}
Func<T, bool>
替代 Predicate<T>
。 - SWekoAll()
的确切相反是None
,但由于LINQ没有None()
方法,因此您可以通过!set.Any()
实现相同的结果。!a_list.Any(item => item.matches == true)
如果a_list中没有任何一个元素的matches
值为真,则会产生true
。
另一个例子:
names.All(item => item.StartsWith("R"))
如果names
中所有的项都以R开头,则为真(正如您已经知道的那样)。
!names.Any(item => item.StartsWith("R"))
!a_list.Any(item => item.matches == true)
!a_list.Any(item => item.matches)
a_list.All(item => !item.matches)
true
或false
。.matches
总是为true
,你只需要第二个!
而不需要第一个吗? - TankorSmash您写道:
a_list.All(item => !(item.field_is_true == true))
a_list.All(item => item.flag== false) // more readable to me...
//return true if all of the items have a **flase** value on their flag
!a_list.Any(item => item.flag==true)
关于性能问题: .any() 与 .all() - 在使用linq to object时,两者的性能是相同的,更多信息请参见:LINQ: Not Any vs All Don't
bool conditionDoesntExist = a_list.All(item => !(item.field_is_true == true));
你可以拥有
bool conditionDoesExist = a_list.Any(item => item.field_is_true == true)
item => item.field_is_true == false
或者简单地写成item => !item.field_is_true
)。bool conditionDoesntExist = !a_list.Any(item => item.field_is_true == true);
全部
a_list.All(item => item.condition)
一些
a_list.Any(item => item.condition)
并非全部
!a_list.All(item => item.condition)
或者:
a_list.Any(item => !(item.condition))
无
!a_list.Any(item => item.condition)
或者
a_list.All(item => !(item.condition))
None()
方法。 - JLRisheNone
会相当简单,但是!set.Any()
可以达到与None
相同的效果。 - JLRishe