我有一个类似以下的枚举:
public enum MyCategory
{
Automotive = 1,
BeautySalon = 2,
EventsEntertainment = 3,
and so on...
}
在我的主要课程中,我有一个这样的属性:
public List<MyCategory> Categories { get; set; }
我的商家实体可以随时与其中一个或多个相关联。我可以在用户界面中显示此枚举列表,但我的问题是,将这些枚举中的多个存储在List&lt;&gt;中是一种很好的做法。像这样,如果是这样,最好的办法是什么?
答案 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
...
}