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。

我究竟做错了什么?

谢谢

4

1 回答 1

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 相同。

于 2013-10-20T03:41:50.737 回答