Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较时选择多个枚举值_C#_C# 4.0_Enums - Fatal编程技术网

C# 比较时选择多个枚举值

C# 比较时选择多个枚举值,c#,c#-4.0,enums,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.Catego

我试图在比较时根据用户选择的内容选择不同类型的枚举值

这是我的代码:

    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

我做错了什么


谢谢

你好像有点困惑。我相信您想要的是在枚举上使用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相同。

如果我正确理解yoyr的问题,我的建议是您检查一个名为
.HasFlag()的方法。