2013-10-20 158 views
1

我试图根据用户选择什么来比较时选择不同类型的枚举值。比较时选择多个枚举值

这是我的代码:

public enum CategoryType { E1, E2, E3, E4 } 

    List1.Add(new model{ Line = "Line 1", Category = model.CategoryType.E3| model.CategoryType.E1}); 
    List1.Add(new model{ Line = "Line 2", Category = model.CategoryType.E2 | model.CategoryType.E1}); 
    List1.Add(new model{ Line = "Line 3", Category = model.CategoryType.E4 | model.CategoryType.E3}); 

var modelEnum = CategoryType.E1 | CategoryType.E3 

var ValidLines = List1.Where(P => P.Category == modeEnum).ToList() 
         .Select(P => P.Line).ToList(); 

上面的代码不起作用。由于我在寻找E1或E3,它应该返回任何包含E1或E3的项目。在这种情况下,它应该返回全部3个项目,因为它们都包含E1或E3。

我在做什么错?

谢谢

+0

如果我理解yoyr问题的话,我的建议是让你检查一个名为'.HasFlag()的方法' – 2013-10-20 03:47:51

回答

0

你似乎有点困惑。我相信你想要的是在你的枚举上使用Flags属性,然后给它们分配唯一的值(这很难导致你的代码无效)。例如:

[Flags] 
public enum CategoryType { E1 = 1, E2 = 2, E3 = 4, E4 = 8 } 

这样你的“位或”运算符(|)将允许你正确地结合你的价值观(最多31个值,加0)成一个独特的价值。测试它你想要做这样的事情:

if ((value & CategoryType.E2) == CategoryType.E2) { ... 

他们的方式,你有它你​​的位或将返回非唯一整数。你有什么是这样的:

public enum CategoryType { E1 = 0, E2 = 1, E3 = 2, E4 = 3 } 

这是默认的枚举行为。所以E1 | E3是0 | 2这是2. E2 | E3是1 | 2是3,与E4相同。