簡體   English   中英

本地定義的Enum標志和Enum定義標志有什么區別?

[英]What is the difference between local defined Enum-flags and Enum-defined flags?

我與Enums一起工作時,我在尋找一種將Enums [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

從枚舉中刪除DinnerItems.MyOrder時使用相同的代碼:主菜,開胃菜,甜點,飲料包括面:假

根據文檔

返回值使用通用格式說明符(“ G”)進行格式化。 也就是說,如果FlagsAttribute不適用於此枚舉類型,並且有一個等於該實例值的命名常量,則返回值是一個包含常量名稱的字符串。 如果應用了FlagsAttribute,並且存在一個或多個等於該實例值的命名常量的組合,則返回值是一個字符串,其中包含用分隔符分隔的常量名稱列表。

如果沒有MyOrder ,它將執行以定界符分隔的名稱列表-這似乎是您想要的。

但是使用 MyOrder好吧, MyOrder是一個或多個命名常量(一個常量,四個常量)的最簡單組合-因此它改為輸出MyOrder

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM