[英]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|Date
與Date
相同,因為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.