我想创建一个测试,如果列表中任何对象的某个属性为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;
答案 0 :(得分:8)
myBool = List.Any(r => r.property)
答案 1 :(得分:3)
这里的答案是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...
}
答案 2 :(得分:0)
是的,使用LINQ
http://msdn.microsoft.com/en-us/vcsharp/aa336747
return list.Any(m => m.ID == 12);
修改:更改代码以使用Any
和缩短代码
答案 3 :(得分:0)
myBool = List.FirstOrDefault(o => o.property) != null;
我尝试使用你做的相同变量。