您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

2026-03-31 12:041阅读0评论SEO资讯
  • 内容介绍
  • 相关推荐

本文共计705个文字,预计阅读时间需要3分钟。

您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

为了简化并改写您的要求,以下是一个简化的版本:

请提供关于网络技术的原创开头内容,不超过100字,直接输出结果。

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()); //利用反射找是否有特性 if (field.IsDefined(attrType)) { var chinese = field.GetCustomAttribute<ChineseAttribute>(); return chinese.Chinese; } //没有定义Chinese特性,直接返回具体指 return value.ToString(); }

您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

四、给枚举类添加特性

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中的应用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。

本文共计705个文字,预计阅读时间需要3分钟。

您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

为了简化并改写您的要求,以下是一个简化的版本:

请提供关于网络技术的原创开头内容,不超过100字,直接输出结果。

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()); //利用反射找是否有特性 if (field.IsDefined(attrType)) { var chinese = field.GetCustomAttribute<ChineseAttribute>(); return chinese.Chinese; } //没有定义Chinese特性,直接返回具体指 return value.ToString(); }

您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

四、给枚举类添加特性

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中的应用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。