不忘本~枚举

简介:

嗨!又要和大家一起说说不忘本的文章了,其实我写的不忘本就是指定C#的一些基础知识,把基础知识从书面上拿出来,放到实践中去讲!咱领袖说的好:理论要联系实际吗!哈哈!

先看一个最简单的枚举enum吧

1    public enum UserBaseColumns
2 
3     {
4 
5         UserName = 1,
6 
7         Age = 2,
8 
9     }

我们如何去使用它呢,很简单,如果我们希望拿到UserBaseColumns.UserName这个枚举元素的值,可以这样写(int)UserBaseColumns.UserName,也就是强转换一下就OK了,因为枚举和数值类型可以直接转换的,如果希望得到UserName这个字符呢,即枚举元素的名称,我们可以这样:

Enum.GetName(UserBaseColumns.UserName.GetType(), UserBaseColumns.UserName)

其实为什么要使用枚举呢?这个问题是比它的基础知识更重要的,枚举对于程序员来说是提高了程序的可读性,对于使用程序的用户来说,没有任何意义;我们通常把一些具有固定值的对象创建为枚举对象,把一些经常发生变化的存储在数据表中,这也是程序设计的一个常识,例如,一个用户对象,它有一个状态字段,而这个字段只有"正常","删除","禁用"这三种值,那我们为了使用程序员在给对象赋值时的可读性强,就把这个字段设为枚举枚举类型,看代码

 1  public enum Status
 2 
 3     {
 4 
 5         /// <summary>
 6 
 7         /// 正常
 8 
 9         /// </summary>
10 
11         Normal = 100,
12 
13         /// <summary>
14 
15         /// 删除
16 
17         /// </summary>
18 
19         Deleted = 400,
20 
21         /// <summary>
22 
23         /// 禁用
24 
25         /// </summary>
26 
27         Blocked = 500,
28 
29     }

而用户对象就变成了

 1      /// <summary>
 2 
 3     /// 用户实体
 4 
 5     /// </summary>
 6 
 7     public partial class UserBase : IDataEntity
 8 
 9     {
10 
11         /// <summary>
12 
13         /// 用户名
14 
15         /// </summary>
16 
17         public string UserName { get; set; }
18 
19         /// <summary>
20 
21         /// 年龄
22 
23         /// </summary>
24 
25         public int Age { get; set; }
26 
27         /// <summary>
28 
29         /// 状态
30 
31         /// </summary>
32 
33         public Status Status { get; set; }
34 
35     }

以上是枚举在程序开发中最基础的用法,现在我再来说说枚举的一些高级用法,枚举对象支持位运算,即它支持,加,减运算.

 1  [Flags]
 2 
 3     public enum UserBaseColumns
 4 
 5     {
 6 
 7         UserName = 1,
 8 
 9         Age = 2,
10 
11     }

这是加运算

1  UserBaseColumns enums = new UserBaseColumns();
2 
3  enums = UserBaseColumns.UserName | UserBaseColumns.Age;
这是减运算
1 enums = UserBaseColumns.UserName ^ (~UserBaseColumns.Age);
这是查看元素是否在枚举合的操作
1 if ((enums & UserBaseColumns.UserName) != 0)
2 
3                 Console.WriteLine("包括名字字段");
4 
5             else
6 
7                 Console.WriteLine("不包括名字字段");

在C#4.0中已经集成了判断元素是否在集合的方法:HasFlag

当然我们不提倡用4.0中的方法,因为如果你的frameworks是较低的版本时,这个HasFlag就报错了,

别外,还有一种将枚举转为字符,再去比较它是否存在于集合的方法,下面我给出代码:

 1      /// <summary>
 2 
 3     /// 自定义枚举指是否在枚举列表中
 4 
 5     /// </summary>
 6 
 7     public class HasEnum
 8 
 9     {
10 
11         private string[] EnumArray = null;
12 
13         public HasEnum(Enum enums)
14 
15         {
16 
17             this.EnumArray = Regex.Split(enums.ToString(), ",");
18 
19             if (this.EnumArray.Length < 1)
20 
21                 throw new Exception("输入参数异常");
22 
23         }
24 
25         public bool HasEnumFlags(Enum entity)
26 
27         {
28 
29             return EnumArray.Contains(Enum.GetName(entity.GetType(), entity));
30 
31         }
32 
33     }

好了,讲到这里,大家回去做个demo,自己实验一下吧!如果有疑问,请给我留言!

为了所有enum对象都是继承为Enum这个抽象类的.它是所有枚举对象的基类,所以在程序中我们经常这样写

      
 1  /// <summary>
 2 
 3         /// 更新指定字段
 4 
 5         /// </summary>
 6 
 7         /// <param name="entity"></param>
 8 
 9         /// <param name="enums"></param>
10 
11         void Update(IDataEntity entity, Enum enums);
上面的编程风格叫做面向接口编程,也叫面向超类编程!在这个例子中Enum就是微软给我们定义的超类
我们定义的所有枚举很派生自它.
本文转自博客园张占岭(仓储大叔)的博客,原文链接:不忘本~枚举,如需转载请自行联系原博主。
目录
相关文章
|
1月前
|
Java Spring
使用枚举定义常量更好点儿
使用枚举定义常量更好点儿
14 1
|
3月前
|
开发框架 Java 编译器
Java反射,枚举讲解
Java反射,枚举讲解
43 0
|
9月前
|
编译器 Linux C++
学C的第三十天【自定义类型:结构体、枚举、联合】-1
1 . 结构体 (1). 结构体的基础知识: 结构是一些值的集合,这些值称为成员变量。 结构的每个成员可以是不同类型的变量。
|
9月前
|
存储
学C的第三十天【自定义类型:结构体、枚举、联合】-2
(7). 修改默认对齐数: 结构在对齐方式不合适的时候,我们可以自己更改默认对齐数。 使用 #pragma 预处理指令,修改默认对齐数
|
4月前
|
存储 编译器 C++
C生万物 | 聊聊枚举与联合体的用法
C生万物 | 聊聊枚举与联合体的用法
32 0
|
7月前
巧用枚举替代if
巧用枚举替代if
|
8月前
|
设计模式 JSON Java
枚举类——用好枚举真的没有那么简单!
枚举类——用好枚举真的没有那么简单!
66 0
|
10月前
|
C++
【C++知识点】枚举类型
【C++知识点】枚举类型
111 0
|
11月前
|
Java C语言 Spring
C语言编程—枚举
枚举是 C 语言中的一种基本数据类型,用于定义一组具有离散值的常量。它可以让数据更简洁,更易读。 枚举类型通常用于为程序中的一组相关的常量取名字,以便于程序的可读性和维护性。 定义一个枚举类型,需要使用 enum 关键字,后面跟着枚举类型的名称,以及用大括号 {} 括起来的一组枚举常量。每个枚举常量可以用一个标识符来表示,也可以为它们指定一个整数值,如果没有指定,那么默认从 0 开始递增。
192 0
|
JavaScript 前端开发
学习TypeScrip10(枚举类型)
字符串枚举的概念很简单。 在一个字符串枚举里,每个成员都必须用字符串字面量,或另外一个字符串枚举成员进行初始化。
33 0
学习TypeScrip10(枚举类型)