繁体   English   中英

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

[英]Parsing multiple enum values (Flagged): Reading in a filter type from a query string

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

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

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

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

你可以试试像

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|DateDate相同,因为0 + 1 => 1

编辑

正如@ScottSelby所说,这也行得通

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM