C# 如何使用Linq确定数组中的一个元素的属性值是否为false,以及所有元素的属性值是否为true

C# 如何使用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

我有几个对象的数组,它们有一个isClosed bool属性。我想知道如何确定:

如果所有值都为真

如果这些值中只有一个为false

使用Linq。

使用Linq.all like

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;
}