[C#]C#补习——类型和操作符—PART3—枚举

本文深入探讨C#中枚举的高级用法,包括枚举的底层实现、特殊应用场景及转换技巧。揭示了枚举的值类型特性、默认值规律、与值类型的继承关系等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在补习完C#类以及一些语法上的知识后,再回到类型上进行补习,本章补习的是C#中的枚举。

以下是本文所要介绍的内容:

1、枚举中忽略的知识。

2、枚举常见的各种使用方法。

 

一、枚举中忽略的知识

    对于枚举,一般的用法都是用来解决一些代码的可读性,如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
switch (state)
{
      case  0:
         break ;
      case  1:
         break ;
}
switch (stateEnum)
{
      case  StateEnum.Opened:
          break ;
      case  StateEnum.Closed;
          break ;
}

通过对比上面的代码,我们可以很容易的看出使用了枚举后代码的可读性更强了,而本文不是来介绍如何枚举的基础知识的,而是记录下我忽略过的一些知识,也可能是你所需要了解的

1、枚举中的值类型默认为int,当然也可以是short,long等数值类型,但是不能是char、string等类型。

如果想更改枚举的类型只需按照以下代码既可:

1
2
3
public  enum  StateEnum: long
{
}

2、枚举中的值默认从0开始,并且可以不用给枚举显示的指定值,如果不显示指定值则默认从0开始,每个枚举在前一个枚举的值上+1。

3、枚举是值类型但是其并不是直接继承值类型的基类型:System.ValueType,而是以下的继承链:

System.Object->System.ValueType->System.Enum->具体枚举

4、对于某个变量有3种或者3种以上的情况的时候应该使用枚举而不是使用int或者string,因为这样的代码可读性更强。

5、使用枚举不会带来什么性能问题,由于其本质还是值类型。

 

二、枚举常见的各种使用方法

     在日常开发的过程中,枚举可以帮我们解决很多问题,但是也会碰到许多问题,下面列举了一些枚举常见的使用方法:

1、可以将枚举的值指定为另一个枚举,且如果后续枚举没有指定值则会自动增加,如下代码:

1
2
3
4
5
6
7
public  enum  StateEnum
{
      Opened=0,
      Closed=1,
      Error=Closed,   
      UnKnow
}

可以看到上面的代码中,Error的值是使用的和Closed一样的值,而UnKnow并未指定值,这时根据枚举的特性,UnKnow的值则应该是2。

 

2、枚举数组之间的转换,如果有2个定义类似或者相同的枚举组成数组想进行转换,一般来说是不行的(C#不支持这样的转换),而可以通过先将枚举数组转成Array然后再转成相应的枚举数组,如下代码:

1
StateEnum1[] stateEnums=(StateEnum1[])(Array) new  StateEnum2[3];

虽然这样做可以将C#不支持的形式变成可能,但是并不推荐这么做,因为这样可能会出现不可预见的错误。

而对于枚举的正常转换都是可以通过Enum.Parse()进行转换。

 

3、如果需要对枚举进行组合使用(如按位计算),则需要使用FlagAttributes特性,如下代码:

1
2
3
4
5
6
7
[Flags]  //属于System.IO命名空间下
public  enum  State
{
      Read=0, //000
      Write=1, //001
      Create=2, //010
      Delete=4, //100

Allow=Read | Write } public void Test(State state) { if(state==State.Read | State.Write) { } }

 
 

一旦使用了Flags特性后,就可以像上面的代码一样对枚举进行组合判断,但需要注意的是,使用了Flags特性后必须为枚举显式的指定值,否则无法使用,同时显式指定的值最好是2的次幂,如:0,1,2等,这样可以保证组合的值不会重叠,具体可以查看MSDN:FlagsAttribute 类



本文转自kyo-yo博客园博客,原文链接:http://www.cnblogs.com/kyo-yo/archive/2011/01/04/CSharp-Tutorial-Types-And-Operators-PART2-Enum.html,如需转载请自行联系原作者


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值