cde*_*zaq 8 c# lambda enums aggregate bit-fields
我有一个对象集合,每个对象都有一个位字段枚举属性.我想要得到的是整个集合中位字段属性的逻辑OR.如何通过循环遍历集合(希望使用LINQ和lambda)来完成此操作?
这是我的意思的一个例子:
[Flags]
enum Attributes{ empty = 0, attrA = 1, attrB = 2, attrC = 4, attrD = 8}
class Foo {
Attributes MyAttributes { get; set; }
}
class Baz {
List<Foo> MyFoos { get; set; }
Attributes getAttributesOfMyFoos() {
return // What goes here?
}
}
Run Code Online (Sandbox Code Playgroud)
我试过这样用.Aggregate
:
return MyFoos.Aggregate<Foo>((runningAttributes, nextAttributes) =>
runningAttributes | nextAttribute);
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我无法弄清楚如何使用它来得到我想要的东西.有没有办法使用LINQ和一个简单的lambda表达式来计算这个,或者我只是在集合上使用循环?
注意:是的,这个示例案例很简单,基本foreach
将是要走的路,因为它简单且不复杂,但这只是我实际使用的简化版本.
svi*_*ick 20
您的查询不工作,因为你想申请|
的Foo
S,不是Attributes
.你需要做的是获取集合中的MyAttributes
每一个Foo
,这是exaclty做什么Select()
:
MyFoos.Select(f => f.MyAttributes).Aggregate((x, y) => x | y)
Run Code Online (Sandbox Code Playgroud)