建议7: 将0值作为枚举的默认值

转载 2016年08月29日 20:35:47

建议7: 将0值作为枚举的默认值

允许使用的枚举类型有byte、sbyte、short、ushort、int、uint、long和ulong。应该始终将0值作为枚举类型的默认值。不过,这样做不是因为允许使用的枚举类型在声明时的默认值是0值,而是有工程上的意义。

试想,一个代表星期的枚举类Week,我们会想当然地认为它应该有7个元素,代码如下所示:

  1. enum Week  
  2. {  
  3.     Monday = 1,  
  4.     Tuesday = 2,  
  5.     Wednesday = 3,  
  6.     Thursday = 4,  
  7.     Friday = 5,  
  8.     Saturday = 6,  
  9.     Sunday = 7 

那么,你一不小心编写了如下的代码,它的输出会是什么呢?

  1. class Program  
  2. {  
  3.     static Week week;  
  4.  
  5.     static void Main(string[] args)  
  6.     {  
  7.         Console.WriteLine(week);  
  8.     }  

输出为:

Week看上去多了第8个值,同时,很不幸,这段代码没有引发异常。所以,应该始终为枚举的0值指定默认值。在上面的枚举类型Week中,可以将显式为元素赋值去掉,编译器会自动从0值开始计数,然后逐个为元素的值+1。

注意 除了上文说的Week的第8个值外,其实,如果枚举类型的元素类型为整型,那么还可以将其他整型的值赋值给Week:

  1. week = (Week)9;  
  2. Console.WriteLine(week); 

这段代码并不会出错,输出:9。

转自:《编写高质量代码改善C#程序的157个建议》陆敏技

C语言enum枚举类型解析

在实际应用中,有的变量只有几种可能取值。如人的性别只有两种可能取值,星期只有七种可能取值。在 C 语言中对这样取值比较特殊的变量可以定义为枚举类型。所谓枚举是指将变量的值一一列举出来,变量只限于列举出...
  • skyflying2012
  • skyflying2012
  • 2014年04月01日 15:37
  • 117200

C#枚举类型的默认值一定是0说起

1. 问题 //Code #01 class Tester {     static void Main()     {         Alignment a = new...
  • xiaominggunchuqu
  • xiaominggunchuqu
  • 2017年09月15日 14:54
  • 910

枚举类型的初始值问题

枚举类型是内置类型吗?型的的初始化规则是什么? 首先记住两点:1、内置类型变量(int,bool,指针等)的初始化规则在函数体外(全局)定义的内置类型变量会自动初始化0,函数体内定义的内置类型变量不会...
  • coobeara
  • coobeara
  • 2007年06月08日 19:39
  • 9192

c++ 枚举的定义、设置值、取值范围

c++的  enum 工具提供了另一种创建符号常量的方式,这种方式可以代替  const。 他还允许定义新类型,但必须按严格的限制进行。使用enum  的用法与使用结构相似。 例如,请看下面的语句...
  • fengyelengfeng
  • fengyelengfeng
  • 2015年11月14日 21:58
  • 2905

慎用mysql的enum字段

但ENUM带来的问题也不少,比如数据迁移的时候,他几乎不可能被其他数据库所支持,如果enum里面是字符串,对于其他数据库来说就更郁闷了,还不能设为tinyint等类型的字段(enum虽然可以存储字符串...
  • u013670173
  • u013670173
  • 2014年04月28日 10:41
  • 1922

unity学习之枚举类型

欢迎来到我的博客,希望在这里我的博客内容可以给那些喜欢unity3d的朋友们带来有用的知识。 今天我们主要讲了枚举类型,让我们来一起看一下吧。 枚举类型: 定义:枚举类型是一种只类型...
  • jingjingcrystal
  • jingjingcrystal
  • 2014年12月01日 22:07
  • 1535

恢复db_recovery_file_dest_size参数为默认值“0”方法

db_recovery_file_dest_size参数的作用是限制闪回恢复区可存放文件总大小。一旦将参数db_recovery_file_dest_size设置为非零值后“很难”恢复为默认值“0”。...
  • hollo_hhy
  • hollo_hhy
  • 2014年06月04日 23:04
  • 1532

linux下把eth1改为默认值eth0

/proc/net/dev shows "eth1" not "eth0" Vancouver Linux Users Group ...
  • wangdeng1314
  • wangdeng1314
  • 2011年06月23日 09:56
  • 1325

Android中如何修改编译的资源ID值(默认值是0x7F...可以随意改成0x02~0x7E)

一、技术准备今天我们来看一下如何修改Android中编译时的资源Id的值,在讲解这内容之前,我们需要先了解一下Android中的资源编译之后的结构和编译过程,这里就不多说了,具体可以查看这篇文章:ht...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2016年03月07日 18:42
  • 10648

恢复WORD出厂默认值

  • 2016年01月23日 17:06
  • 67KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:建议7: 将0值作为枚举的默认值
举报原因:
原因补充:

(最多只允许输入30个字)