[英]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.