C# 如何使用Linq确定数组中的一个元素的属性值是否为false,以及所有元素的属性值是否为true
我有几个对象的数组,它们有一个isClosed bool属性。我想知道如何确定: 如果所有值都为真 如果这些值中只有一个为false 使用Linq。使用Linq.all likeC# 如何使用Linq确定数组中的一个元素的属性值是否为false,以及所有元素的属性值是否为true,c#,linq,C#,Linq,我有几个对象的数组,它们有一个isClosed bool属性。我想知道如何确定: 如果所有值都为真 如果这些值中只有一个为false 使用Linq。使用Linq.all like List<Item> items = new List<Item>() { new Item() { IsClosed = true }, new Item() { IsClosed = true }, ne
List<Item> items = new List<Item>()
{
new Item() { IsClosed = true },
new Item() { IsClosed = true },
new Item() { IsClosed = true }
};
var allValuesAreTrue = items.All(it => it.IsClosed);
var onlyOneValueIsTrue = items.Count(it => it.IsClosed) == 1;
它告诉您集合中的所有元素是否都符合特定条件。它是.NET Framework中System.Linq命名空间的一部分。它返回true或false
if (array.All(element => element.isClosed))
{
return true;
}
使用以下代码,您可以实现您的两个期望要求:
var list = new List<MyClass>();
var myClass1 = new MyClass {IsClosed = true};
var myClass2 = new MyClass { IsClosed = true };
var myClass3 = new MyClass { IsClosed = true };
list.Add(myClass1);
list.Add(myClass2);
list.Add(myClass3);
var response=list.All(x => x.IsClosed);
如果列表中的所有元素都具有相同的值,则返回true。您可以将问题解释为:
var count = arr.Count(a => a.isClosed);
if(count == arr.Length)
//all
else if(count == 1)
//only one
else
//not all, but more than one
我想知道如何确定:
如果false的计数为0
如果计数为false=1
您可以简单地使用LINQ计数:
使用这种方法,您将只在集合中迭代一次 所有和任何Enumerable?@NtFreX Any不会仅对一个false给出正确的结果
switch (collection.Count(x => !x.isClosed))
{
case 0:
// case 1, all values are true
break;
case 1:
// case 2, exactly one of these values is false
break;
default:
// other cases, more than 1 false value
break;
}