C#中FlagsAttribute属性在enum中的应用详解
#代码知识 发布时间: 2026-01-12
Net C#中枚举的声明格式如下所示:

[attributes] [modifiers] enum identifier [:base-type] {enumerator-list} [;]
FlagsAttribute属性就是枚举类型的一项可选属性。它的主要作用是可以将枚举作为位域处理(P.S. C#不支持位域)。
所谓位域 是单个存储单元内相邻二进制位的集合。
通过为枚举添加这个属性,可以改变枚举的一些行为来满足我们的需要。
enum MyFlags { Flag1, Flag2, Flag3, Flag4};
MyFlags myFlag = MyFlags.Flag2 | MyFlags.Flag3;
Console.WriteLine(myFlag);//Flag4
因为对于整数来说,| 操作就是将其转化为二进制再进行或运算。Flags.Flag2 | Flags.Flag3做的工作实际上是 0001 | 0010 = 0011 = 3再转换成(MyFlags)3就是Flag4了
如果枚举声明如下:
[FlagsAttribute]
enum MyFlags{
Flag1 = 0, //000
Flag2 = 1, //001
Flag3 = 2, //010
Flag4 = 4 //100
};
则上述结果为Flag2,Flag3,这样做的意义在于我们可以实现“或”的关系。
就上例而言,myFlag可以更直观的表现为011,因此当我们想要检验它满足哪个枚举值时我们可以使用&操作:
if((myFlag & MyFlags.Flag2) == MyFlags.Flag2)
{
Console.WriteLine("true");
}
if((myFlag & MyFlags.Flag3) == MyFlags.Flag3)
{
Console.WriteLine("true");
}
011&001 = 001,011&010 = 010,因此这两个if都会成立,这就是这种枚举的意义吧。另外我们应当注意默认初始化的myFlag的值为0,与其作&运算不会有任何结果。
补充知识:C# 使用特性(Attribute)来汉化枚举类
一、新建枚举
public enum CRUD
{
Create,
Retrieve,
Update,
Delete
}
二、新建特性类
public sealed class ChineseAttribute : Attribute
{
public string Chinese { get; set; }
public ChineseAttribute(string _chinese = "未汉化")
{
Chinese = _chinese;
}
}
三、利用反射获取特性
这里我们写一个枚举类的扩展方法
public static string GetChinese(this Enum value)
{
Type objType = value.GetType();
Type attrType = typeof(ChineseAttribute);
FieldInfo field = objType.GetField(value.ToString());
//利用反射找是否有【Chinese】特性
if (field.IsDefined(attrType))
{
var chinese = field.GetCustomAttribute<ChineseAttribute>();
return chinese.Chinese;
}
//没有定义Chinese特性,直接返回具体指
return value.ToString();
}
四、给枚举类添加特性
public enum CRUD
{
[Chinese("创建")]
Create,
[Chinese("读取")]
Retrieve,
[Chinese]
Update,
Delete
}
五、测试
static void Main(string[] args)
{
List<MyEnum.CRUD> values = new List<MyEnum.CRUD>
{
MyEnum.CRUD.Create,
MyEnum.CRUD.Delete,
MyEnum.CRUD.Retrieve,
MyEnum.CRUD.Update
};
foreach (var item in values)
{
Console.WriteLine(item.GetChinese());
}
Console.Read();
}
效果如下
以上这篇C#中FlagsAttribute属性在enum中的应用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
代码知识SEO上一篇 : Python为何不支持switch语句原理详解
下一篇 : 详解JavaScript类型判断的四种方法
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!