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

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

Barbara Streisand
发布: 2025-02-02 15:01:09
原创
287 人浏览过

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

了解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(); // "5"

var str2 = (SuitsFlags.Spades | SuitsFlags.Diamonds).ToString(); // "Spades, Diamonds"

登录后复制
>显示单个标志,而

显示数值总和。SuitsFlags 至关重要的是,Suits

不会自动分配两个功率。 您必须手动执行此操作以进行正确的位操作。 不正确的用法:

[Flags] 正确的用法:

1

2

3

4

5

6

7

8

[Flags]

public enum MyColors

{

    Yellow,  // 0

    Green,   // 1

    Red,     // 2

    Blue     // 3

}

登录后复制
检查是否设置了标志,请使用

(对于.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))

{

    // Yellow is present

}

登录后复制

位或结合标志;钻头并隔离它们。

>

1

2

3

4

if ((myProperties.AllowedColors & MyColor.Yellow) == MyColor.Yellow)

{

    // Yellow is present

}

登录后复制
避免使用位并检查

>;它永远是错误的。使用逻辑比较,查看是否设置了任何标志。

>

1

2

3

4

<code>Yellow: 0001

Green:  0010

Red:    0100

Blue:   1000</code>

登录后复制

属性是用于管理C#枚举中选项集的强大工具,利用位操作进行有效的标志操作。

>

以上是[标志]属性如何增强C#中的枚举功能?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板