簡體   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