我不时会看到如下枚举:
[Flags]
public enum Options
{
None = 0,
Option1 = 1,
Option2 = 2,
Option3 = 4,
Option4 = 8
}
我不明白[Flags]属性到底做什么。
任何人都有一个很好的解释或例子可以发布?
我不时会看到如下枚举:
[Flags]
public enum Options
{
None = 0,
Option1 = 1,
Option2 = 2,
Option3 = 4,
Option4 = 8
}
我不明白[Flags]属性到底做什么。
任何人都有一个很好的解释或例子可以发布?
当前回答
如果有人已经注意到这种情况,请道歉。我们可以在反射中看到旗帜的完美例子。是绑定标志ENUM。
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum BindingFlags
用法
// BindingFlags.InvokeMethod
// Call a static method.
Type t = typeof (TestClass);
Console.WriteLine();
Console.WriteLine("Invoking a static method.");
Console.WriteLine("-------------------------");
t.InvokeMember ("SayHello", BindingFlags.InvokeMethod | BindingFlags.Public |
BindingFlags.Static, null, null, new object [] {});
其他回答
标志允许您在枚举中使用位掩码。这允许您组合枚举值,同时保留指定的值。
[Flags]
public enum DashboardItemPresentationProperties : long
{
None = 0,
HideCollapse = 1,
HideDelete = 2,
HideEdit = 4,
HideOpenInNewWindow = 8,
HideResetSource = 16,
HideMenu = 32
}
当可枚举值表示枚举成员。这里我们使用按位运算符|和&实例[标志]公共枚举边{Left=0,Right=1,Top=2,Bottom=3}Sides leftRight=侧面.Left|侧面.Right;Console.WriteLine(左-右)//左侧、右侧string stringValue=leftRight.ToString();Console.WriteLine(字符串值)//左侧、右侧侧面s=侧面。左侧;s |=侧面。右侧;Console.WriteLine//左侧、右侧s^=侧面。右侧;//切换侧面。右侧Console.WriteLine//左边
作为可接受答案的扩展,在C#7中,枚举标志可以使用二进制文本编写:
[Flags]
public enum MyColors
{
None = 0b0000,
Yellow = 0b0001,
Green = 0b0010,
Red = 0b0100,
Blue = 0b1000
}
我认为这一表述清楚地表明了旗帜在幕后的运作方式。
如果有人已经注意到这种情况,请道歉。我们可以在反射中看到旗帜的完美例子。是绑定标志ENUM。
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum BindingFlags
用法
// BindingFlags.InvokeMethod
// Call a static method.
Type t = typeof (TestClass);
Console.WriteLine();
Console.WriteLine("Invoking a static method.");
Console.WriteLine("-------------------------");
t.InvokeMember ("SayHello", BindingFlags.InvokeMethod | BindingFlags.Public |
BindingFlags.Static, null, null, new object [] {});
要添加Mode.Write:
Mode = Mode | Mode.Write;