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