在上一家公司的时候,发像一个很不好的地方,那就是一个实体的状态使用int来表示。个人觉的主要有以下一些缺点。
枚举的优点:
1、虽然int是C#中的强类型,但int不是业务逻辑的强类型,但枚举可以实现业务逻辑的强类型。
比如说一个订单的状态{新单,付款、配送、完成}如果使用枚举的话,那么就能确定它能安全的表示这些状态,而如果直接使用数字就可能导致这个数字不能正确的表示这些状态。
2、程序代码的可读性变差,别人在阅读或修改的时候要不断的看着那一段对于数字的解释说明。
状态.新单 应该要比 0 来的容易理解
if(status==OrderStatus.Finnish) 要比 if(status=3)来的容易理解吧。。。
3、状态不能进行组合,使的状态变的非常多。
比如一条需要审批的记录,它的审批结果有(通过和拒绝),然后需要审批的A级、B级、C级、D级、E级
使用数字来表示需要 2*5=10种。而使用枚举状态来则需要2+5=7种,而且可以进行运算。
\\……其他的以后想到在补充·····
枚举的运算:
枚举可以和int进行相互转换,所以枚举的预算实际上就是int的位运算。
枚举的或运算( | ):以前学c的时候被老师骗的好惨啊,把一个个数字进行分解成2进制,然后在纸上对齐再一位一位的进行或运算。然后再反算成十进制的数字。其实还有一些窍门,大家都学过集合吧,我们可以把一个数字看成是以2^n(n>=0)为元素的集合。比如说7={1,2,4}
21={16+4+1}这样转换为2进制也很容易21就是(10101)。大家理解了上面就很容易计算数字的或运算了。或预算实际上就是我们集合中的并(∪)运算、或运算。比如:7 | 21={16,4,2,1}=23 ,如果是2^n(n>=0)那就更容易算了,就是将这两个数相加。如 128|64=128+64=192
枚举的与预算( & ):枚举的与运算实际上就是数学集合中的交(与)(∩)。如21&7={1,4}=5,128&64={}=0
枚举的异或运算( ^ ):枚举的异或操作实际上是 交集的非 (并集-交集) 。如 21^7={16,2}=18 简单点就是(21|7)-(21&7)=18
枚举运算的运用:
比如一条需要审批的记录,它的审批结果有(通过和拒绝),然后需要审批的A级、B级、C级、D级、E级
现在要表示C级拒绝就:Status.拒绝|Status.C
如何查找D级通过就是 Status&(Status.Allow|Status.C)==(Status.Allow|Status.C)