2013-10-20 156 views
1

我試圖根據用戶選擇什麼來比較時選擇不同類型的枚舉值。比較時選擇多個枚舉值

這是我的代碼:

public enum CategoryType { E1, E2, E3, E4 } 

    List1.Add(new model{ Line = "Line 1", Category = model.CategoryType.E3| model.CategoryType.E1}); 
    List1.Add(new model{ Line = "Line 2", Category = model.CategoryType.E2 | model.CategoryType.E1}); 
    List1.Add(new model{ Line = "Line 3", Category = model.CategoryType.E4 | model.CategoryType.E3}); 

var modelEnum = CategoryType.E1 | CategoryType.E3 

var ValidLines = List1.Where(P => P.Category == modeEnum).ToList() 
         .Select(P => P.Line).ToList(); 

上面的代碼不起作用。由於我在尋找E1或E3,它應該返回任何包含E1或E3的項目。在這種情況下,它應該返回全部3個項目,因爲它們都包含E1或E3。

我在做什麼錯?

謝謝

+0

如果我理解yoyr問題的話,我的建議是讓你檢查一個名爲'.HasFlag()的方法' – 2013-10-20 03:47:51

回答

0

你似乎有點困惑。我相信你想要的是在你的枚舉上使用Flags屬性,然後給它們分配唯一的值(這很難導致你的代碼無效)。例如:

[Flags] 
public enum CategoryType { E1 = 1, E2 = 2, E3 = 4, E4 = 8 } 

這樣你的「位或」運算符(|)將允許你正確地結合你的價值觀(最多31個值,加0)成一個獨特的價值。測試它你想要做這樣的事情:

if ((value & CategoryType.E2) == CategoryType.E2) { ... 

他們的方式,你有它你​​的位或將返回非唯一整數。你有什麼是這樣的:

public enum CategoryType { E1 = 0, E2 = 1, E3 = 2, E4 = 3 } 

這是默認的枚舉行爲。所以E1 | E3是0 | 2這是2. E2 | E3是1 | 2是3,與E4相同。