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

我正在使用枚举,当我遇到枚举的 [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


米脂
浏览 79回答 1
1回答

收到一只叮咚

根据文档:返回值使用通用格式说明符(“G”)进行格式化。也就是说,如果 FlagsAttribute 未应用于此枚举类型并且存在等于此实例的值的命名常量,则返回值是包含常量名称的字符串。如果应用 FlagsAttribute 并且存在一个或多个等于此实例的值的命名常量的组合,则返回值是一个字符串,其中包含以分隔符分隔的常量名称列表。如果没有MyOrder,它就会执行分隔符分隔的名称列表 - 这似乎就是您想要的。但是, MyOrder现在MyOrder是一个或多个命名常量(一个常量 vs 四个常量)的最简单组合 - 所以它会输出MyOrder。
打开App,查看更多内容
随时随地看视频慕课网APP