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