C# 枚举
每种类型(除string外)都有明确的取值范围。诚然,有些类型(如double)的取值范围非常大, 可以看成是连续的,但它们仍是一个固定集合。最简单的示例是bool类型,它只能取两个值:true或false。
有时希望变量取的是一个固定集合中的值。例如,让orientation类型可以存储north、south、east或west中的一个值。
此时可以使用枚举类型。枚举可以完成这个orientation类型的任务:它们允许定义一个类型,其取值范围是用户提供的值的有限集合。所以,需要创建自己的枚举类型orientation,它可以从上述4个值中取一个值。
注意有一个附加步骤一不是仅声明一个给定类型的变量,而是声明和描述一个用户定义的类型,再声明这个新类型的变量。
定义枚举
可以用enum关键字定义枚举,如下所示:
enum <typeName>
{
<valuel>,
<value2>,
<value3>,
...
<valueN>
}
接着声明这个新类型的变量:
<typeName> <varName>;
并赋值:
<varName> = <typeName>.<value>;
枚举使用一个基本类型来存储。枚举类型可取的每个值都存储为该基本类型的一个值,默认情况下该类型为int。通过在枚举声明中添加类型,就可以指定其他基本类型:
enum <typeName> : <underlyingType>
{
<valuel>,
<value2>,
<value3>,
....
<valueN>
}
枚举的基本类型可以是 byte、sbyte、short、ushort、int、uint、long 和 ulong。
默认情况下,每个值都会根据定义的顺序(从0开始),被自动赋予对应的基本类型值。这意味着<valuel> 的值是0, <value2>的值是1, <value3>的值是2,等等。可以重写这个赋值过程:使用=运算符,指定每个枚举的实际值:
enum <typeName> : <underlyingType>
{
<valuel> = <actualVall>,
<value2> = <actualVal2>,
<value3> = <actualVal3>,
...
<valueN> = <actualValN>
}
还可以使用一个值作为另一个枚举的基础值,为多个枚举指定相同的值:
enum <typeName> : <underlyingType>
{
<valuel> = <actualVall>,
<value2> = <valuel>f <value3>,
...
<valueN> - <actualValN>
}
未赋值的任何值都会自动获得一个初始值,这里使用的值是从比上一个明确声明的值大1开始的序列。例如,在上面的代码中,<value3>的值是<valuel>+1。
注意这可能会产生预料不到的问题,在一个定义(如<value2>=<vakiel>)后指定的值可能与其他值相同。例如,在下面的代码中,<value4>的值与<value2>的值相同:
enum <typeName> : <underlyingType>
{
<valuel> = <actualVall>,
<value2>,
<value3> = <valuel>,
<value4>,
...
<valueN> = <actualValN>
}
当然,如果这正是希望的结果,代码就是正确的。还要注意,以循环方式赋值可能会产生错误,例如:
enum <typeName> : <underlyingType>
{
<valuel> = <value2>,
<value2> = <valuel>
}
点击加载更多评论>>