首页 >后端开发 >C++ >[标志]属性如何增强C#中的枚举功能?

[标志]属性如何增强C#中的枚举功能?

Barbara Streisand
Barbara Streisand原创
2025-02-02 15:01:09287浏览

How Does the [Flags] Attribute Enhance Enum Functionality in C#?

了解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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn