比较时选择多个枚举值

时间:2013-10-20 03:25:48

标签: c# c#-4.0 enums

我正在尝试根据用户选择的内容进行比较时选择不同类型的枚举值。

这是我的代码:

    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。

我做错了什么?

由于

1 个答案:

答案 0 :(得分: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相同。

相关问题