了解C#Enums中的[flags]属性
c#枚举,用
属性装饰时,会从将单个值表示为选项集。在雇用位运算符时,这特别有用。 让我们说明:
[Flags]
1 2 3 4 5 6 7 8 9 | [Flags]
public enum Options
{
None = 0,
Option1 = 1,
Option2 = 2,
Option3 = 4,
Option4 = 8
}
|
登录后复制
属性不会神奇地启用位置操作;它的核心功能是改善
方法的输出。[Flags]
ToString()
观察差异:
1 2 3 4 5 | enum Suits { Spades = 1, Clubs = 2, Diamonds = 4, Hearts = 8 }
[Flags] enum SuitsFlags { Spades = 1, Clubs = 2, Diamonds = 4, Hearts = 8 }
var str1 = (Suits.Spades | Suits.Diamonds).ToString();
var str2 = (SuitsFlags.Spades | SuitsFlags.Diamonds).ToString();
|
登录后复制
>显示单个标志,而
显示数值总和。SuitsFlags
至关重要的是,Suits
不会自动分配两个功率。 您必须手动执行此操作以进行正确的位操作。 不正确的用法:
[Flags]
正确的用法:
1 2 3 4 5 6 7 8 | [Flags]
public enum MyColors
{
Yellow,
Green,
Red,
Blue
}
|
登录后复制
检查是否设置了标志,请使用
(对于.net 4及以后):>
1 2 3 4 5 6 7 8 | [Flags]
public enum MyColors
{
Yellow = 1,
Green = 2,
Red = 4,
Blue = 8
}
|
登录后复制
或对于较旧的.NET版本,请使用位和运算符:
HasFlag()
这起来起作用,因为标志是两个的功率:
>
1 2 3 4 | if (myProperties.AllowedColors.HasFlag(MyColor.Yellow))
{
}
|
登录后复制
位或结合标志;钻头并隔离它们。
>
1 2 3 4 | if ((myProperties.AllowedColors & MyColor.Yellow) == MyColor.Yellow)
{
}
|
登录后复制
避免使用位并检查>;它永远是错误的。使用逻辑比较,查看是否设置了任何标志。
>
1 2 3 4 | <code>Yellow: 0001
Green: 0010
Red: 0100
Blue: 1000</code>
|
登录后复制
属性是用于管理C#枚举中选项集的强大工具,利用位操作进行有效的标志操作。
>以上是[标志]属性如何增强C#中的枚举功能?的详细内容。更多信息请关注PHP中文网其他相关文章!