位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# 枚举

提问人:刘团圆发布时间:2020-12-04

    每种类型(除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>

}

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部