C# 从内部列表包含枚举值集的列表中获取项

C# 从内部列表包含枚举值集的列表中获取项,c#,linq,enums,.net-3.5,C#,Linq,Enums,.net 3.5,我有一个包含枚举值列表的类: class MyClass { List<Category> ListProperty = ... } MyClass中的列表可能由任意数量的枚举值组成,这些值可能是二进制组合的,也可能不是二进制组合的: var m = new Myclass { ListProperty = new List<Category> { Category.Some_Category | Category.Another_C

我有一个包含枚举值列表的类:

class MyClass
{
    List<Category> ListProperty = ...
}
MyClass
中的列表可能由任意数量的枚举值组成,这些值可能是二进制组合的,也可能不是二进制组合的:

var m = new Myclass { 
    ListProperty = new List<Category> { 
        Category.Some_Category | Category.Another_Category, 
        Category.Basic
    }
});
myList.Add(m);
cat
由多个枚举值组成时,现在会出现问题。例如,当
cat
等于
Category.Geometry | Category.Base_Geometry
时,我想选择在其
列表属性中既有
几何体
基本几何体
甚至两者都有的所有元素。在这种情况下,
结果
为空。

此条件

var result = myList.Where(x => x.ListProperty.Any(y => (y & cat) == cat));
要求
y
包含
cat
中的所有标志。如果需要
y
包含
cat
中的任何标志,请将
&
的结果与零进行比较:

var result = myList.Where(x => x.ListProperty.Any(y => (y & cat) != 0));

<强>注释:< /强>考虑用<代码> > [标志] < /COD>属性标记您的<代码>类别<代码>枚举,并使用方法检查重叠():

这种情况

var result = myList.Where(x => x.ListProperty.Any(y => (y & cat) == cat));
要求
y
包含
cat
中的所有标志。如果需要
y
包含
cat
中的任何标志,请将
&
的结果与零进行比较:

var result = myList.Where(x => x.ListProperty.Any(y => (y & cat) != 0));

<强>注释:< /强>考虑用<代码> > [标志] < /COD>属性标记您的<代码>类别<代码>枚举,并使用方法检查重叠():


实际上,我用
标志标记了我的枚举。但是,
HasFlags
仅在.NET4上定义,我不能使用它。@HimBromBeere我明白了-我不知道你在.NET的早期版本上。我在问题中添加了相应的标记。实际上,我用
Flags
标记了我的枚举。但是,
HasFlags
仅在.NET4上定义,我不能使用它。@HimBromBeere我明白了-我不知道您在.NET的早期版本上。我在问题中添加了相应的标记。
// Requires .NET 4 or later
var result = myList.Where(x => x.ListProperty.Any(y => y.HasFlag(cat));