我正在使用枚举,当我遇到枚举的 [Flags] 时,我正在寻找一种将一系列枚举值分组到不同组的方法。我注意到 ms-Docs 上的示例正在打印本地声明的枚举按位范围的数组(作为枚举名称),但当我在枚举本身中声明相同的范围时却没有。我已经测试过Enum.HasFlag(),它执行相同的计算,但它不会以相同的方式打印它。我已经找到了很多标志迭代器的解决方案,但似乎该功能已经存在于本地声明的变量中。枚举声明值和本地声明的枚举有什么区别?[Flags] public enum DinnerItems{ None = 0, Entree = 1, Appetizer = 2, Side = 4, Dessert = 8, Beverage = 16, BarBeverage = 32, MyOrder = Appetizer | Entree | Beverage | Dessert,} DinnerItems flagValue = DinnerItems.None | DinnerItems.Side; DinnerItems myOrder = DinnerItems.Appetizer | DinnerItems.Entree | DinnerItems.Beverage | DinnerItems.Dessert; Console.WriteLine("{0} includes {1}: {2}", myOrder, flagValue, myOrder.HasFlag(flagValue));这将打印:MyOrder 包括 Side:False从枚举中删除 DiningItems.MyOrder 时的代码相同:主菜、开胃菜、甜点、饮料包括配菜:False
1 回答
收到一只叮咚
TA贡献1821条经验 获得超4个赞
根据文档:
返回值使用通用格式说明符(“G”)进行格式化。也就是说,如果 FlagsAttribute 未应用于此枚举类型并且存在等于此实例的值的命名常量,则返回值是包含常量名称的字符串。如果应用 FlagsAttribute 并且存在一个或多个等于此实例的值的命名常量的组合,则返回值是一个字符串,其中包含以分隔符分隔的常量名称列表。
如果没有MyOrder
,它就会执行分隔符分隔的名称列表 - 这似乎就是您想要的。
但是, MyOrder
现在MyOrder
是一个或多个命名常量(一个常量 vs 四个常量)的最简单组合 - 所以它会输出MyOrder
。
- 1 回答
- 0 关注
- 78 浏览
添加回答
举报
0/150
提交
取消