解析多个枚举值(带标记):从查询字符串中读取过滤器类型

Tee*_*now 3 c# enums filter enum-flags

我打算制作一个以表格形式显示有关用户信息的页面。每列将是表的属性。我希望查看表的人能够选择过滤用户的方式。将有两个复选框:1用于报告用户,1用于创建日期。我打算制作一个名为UserFilter的枚举,如下所示:

public enum UserFilter
{
   None = 0,
   Date = 1,
   Reported = 2
}
Run Code Online (Sandbox Code Playgroud)

如果我需要添加其他类型,则将其值设置为4,这样我就可以通过按位或(3分别是1和2)来判断选择哪个枚举。我遇到的问题是从查询字符串中读取枚举。我想我可以做一些像int一样的回发(0表示无,1表示日期,2表示报表,3表示两者),但是我想尝试使用实际的字符串回发。我不确定如何将“ Date | Reported”解析为UserFilter中不存在的枚举值。

简而言之:是否有一种干净的方法可以将“ Date | Reported”解析为值3,而不向枚举添加另一个值?

Adr*_*der 5

您可以尝试类似

string enumString = "Date|Reported";
UserFilter uf = enumString.Split('|').ToList().Select(e =>
{
    UserFilter u;
    Enum.TryParse(e, true, out u);
    return u;
}).Aggregate((u, c) => u = u | c);
Run Code Online (Sandbox Code Playgroud)

不过,我建议您将枚举更改为

public enum UserFilter
{
    None = 1,
    Date = 2,
    Reported = 4
}
Run Code Online (Sandbox Code Playgroud)

好像您拥有它的方式None|Date与相同Date,因为0 + 1 => 1

编辑

正如@ScottSelby所说,这也可以

UserFilter u = (UserFilter) 3;
//or 6 rather than 3 if you take my comment above into consideration
Run Code Online (Sandbox Code Playgroud)