为了账号安全,请及时绑定邮箱和手机立即绑定

本地定义的枚举标志和枚举定义的标志有什么区别?

本地定义的枚举标志和枚举定义的标志有什么区别?

C#
米脂 2023-07-09 10:23:04
我正在使用枚举,当我遇到枚举的 [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


查看完整回答
反对 回复 2023-07-09
  • 1 回答
  • 0 关注
  • 50 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信