I have a class containing a list of enum-values:
class MyClass
{
List<Category> ListProperty = ...
}
Now I have a list containing elements of MyClass
which I want to filter based on their enum-values-list.
Category
is marked with Flags
to enable binary combination:
enum Category
{
None = 0x00,
Basic = 0x1,
Geometry = 0x2,
// ...
Base_Geometry = 0x100
}
The list within MyClass
may consist of an arbitrary number of enum-values that might or might not be binarily combined:
var m = new Myclass {
ListProperty = new List<Category> {
Category.Some_Category | Category.Another_Category,
Category.Basic
}
});
myList.Add(m);
Now to retrieve all elements within myList
that contain a given Category
I use this:
var cat = Category.Geometry;
var result = myList.Where(x => x.ListProperty.Any(y => (y & cat) == cat));
The problem now arises when cat
consist of multiple enum-values. E.g. when cat
is equal to Category.Geometry | Category.Base_Geometry
I want to select all elements that have either Geometry
, Base_Geometry
or even both in their ListProperty
. In this case result
is empty.