如何将多个枚举添加到List对象

时间:2014-02-06 21:47:48

标签: c# enums

我有一个类似以下的枚举:

public enum MyCategory
{
    Automotive = 1,
    BeautySalon = 2,
    EventsEntertainment = 3,
    and so on...
}

在我的主要课程中,我有一个这样的属性:

public List<MyCategory> Categories { get; set; }

我的商家实体可以随时与其中一个或多个相关联。我可以在用户界面中显示此枚举列表,但我的问题是,将这些枚举中的多个存储在List&lt;&gt;中是一种很好的做法。像这样,如果是这样,最好的办法是什么?

2 个答案:

答案 0 :(得分:1)

您应该利用FlagsAttribute

[Flags]
public enum MyCategory
{
    Automotive = 1,
    BeautySalon = 2,
    EventsEntertainment = 4,
    and so on... (each next item should have a value that it 2^n)
}

然后:

MyCategory myCategory = MyCategory.Automotive ;
myCategory |= MyCategory.BeautySalon ;

或者,如果您想一次分配多个枚举值:

MyCategory myCategory = (MyCategory.Automotive|MyCategory.BeautySalon); 

我建议使用以下帮助方法进行检查:

public static bool ContainsMyCategory(MyCategory val, MyCategory checkedAgainst)
{
  return ((val & checkedAgainst)==checkedAgainst);
}

答案 1 :(得分:0)

更优选的方法是使用[Flags]样式解决方案。基本上,枚举中的每个值都获得不同的位,并且设置或未设置该位指示该值是否存在。

[Flags]
public enum MyCategory
{
    Automotive = 0x1;
    BeautySalon = 0x2;
    EventsEntertainment = 0x4,
    and so on...
}

Categories属性的类型为MyCategory,您可以使用按位运算来检查值

if (0 != (obj.Categories & MyCategory.Automotive)) {  
  // The automotive category is set 
  ...
}