有没有一种简明的方法可以确定列表中的任何对象是否为真

本文关键字:列表 任何 是否 对象 一种 方法 有没有 | 更新日期: 2023-09-27 18:07:01

我想创建一个测试,这样,如果列表中任何对象的某个属性为true,则结果将为true。

通常我会这样做:

foreach (Object o in List)
{
    if (o.property)
    {
        myBool = true;
        break;
    }
    myBool = false;
}

所以我的问题是:有没有更简洁的方法来完成同样的任务?也许类似于以下内容:

if (property of any obj in List)
    myBool = true;
else
    myBool = false;

有没有一种简明的方法可以确定列表中的任何对象是否为真

使用LINQ和Lambda表达式。

myBool = List.Any(r => r.property)

这里的答案是Linq-Any方法。。。

// Returns true if any of the items in the collection have a 'property' which is true...
myBool = myList.Any(o => o.property);

传递给Any方法的参数是一个谓词。Linq将对集合中的每个项运行该谓词,如果其中任何项通过,则返回true。

请注意,在这个特定的例子中,谓词之所以有效,是因为"property"被假定为布尔值(这在您的问题中是隐含的(。如果是另一种类型的"属性",谓词在测试它时必须更加明确

// Returns true if any of the items in the collection have "anotherProperty" which isn't null...
myList.Any(o => o.anotherProperty != null);

您不一定要使用lambda表达式来编写谓词,您可以将测试封装在一个方法中。。。

// Predicate which returns true if o.property is true AND o.anotherProperty is not null...
static bool ObjectIsValid(Foo o)
{
    if (o.property)
    {
        return o.anotherProperty != null;
    }
    return false;
}
myBool = myList.Any(ObjectIsValid);

您也可以在其他Linq方法中重用该谓词。。。

// Loop over only the objects in the list where the predicate passed...
foreach (Foo o in myList.Where(ObjectIsValid))
{
    // do something with o...
}

是,使用LINQ

http://msdn.microsoft.com/en-us/vcsharp/aa336747

return list.Any(m => m.ID == 12);

编辑:更改代码以使用Any并缩短代码

myBool = List.FirstOrDefault(o => o.property) != null;

我试着使用与你相同的变量。