5

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

public enum UserFilter
{
   None = 0,
   Date = 1,
   Reported = 2
}

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

简而言之:有没有一种干净的方法可以将“日期|报告”解析为值 3,而不向我的枚举添加另一个值?

4

1 回答 1

7

你可以尝试类似的东西

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);

但是,我建议您将枚举更改为

public enum UserFilter
{
    None = 1,
    Date = 2,
    Reported = 4
}

好像你有它你的方式None|Date是一样的Date,因为0 + 1 => 1

编辑

正如@ScottSelby 所说,这也可以

UserFilter u = (UserFilter) 3;
//or 6 rather than 3 if you take my comment above into consideration
于 2013-12-23T04:48:32.610 回答