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

简介:

  在补习完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,如需转载请自行联系原作者


目录
相关文章
|
JSON C# 数据格式
【Azure Function】C#独立工作模式下参数类型 ServiceBusReceivedMessage 无法正常工作
Cannot convert input parameter 'message' to type 'Azure.Messaging.ServiceBus.ServiceBusReceivedMessage' from type 'System.String'.
384 73
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
436 0
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
437 2
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
292 3
C# 枚举(Enum)
枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。 C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。
305 9
C# 可空类型(Nullable)
C# 单问号 ? 与 双问号 ??
314 12
|
存储 C# 开发者
枚举与结构体的应用:C#中的数据组织艺术
在C#编程中,枚举(`enum`)和结构体(`struct`)是非常重要的数据类型。枚举用于定义命名常量集合,提高代码可读性;结构体则封装相关数据字段,适合小型数据集。本文从基本概念入手,探讨它们的使用技巧、常见问题及解决方案,帮助开发者更好地利用这些特性构建健壮的应用程序。
314 9
|
开发框架 .NET 编译器
C# 中的记录(record)类型和类(class)类型对比总结
C# 中的记录(record)类型和类(class)类型对比总结
675 0
|
5天前
|
存储 弹性计算 缓存
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
本文更新了2026年阿里云全系列云服务器租赁活动报价,所有特惠资源均可前往阿里云活动中心选购,整体覆盖从个人入门到企业级高性能场景的全梯度需求。其中轻量应用服务器主打极致性价比,2核2G峰值200M带宽配置每日10点、15点限时抢购价仅38元/年,2核4G配置379元/年起;高性价比的经济型e实例、通用算力型u2i实例覆盖2核4G至4核32G全档位,适配开发测试与中小型企业业务;搭载英特尔至强6处理器的第九代c9i企业级实例算力较上代提升20%,支撑高并发生产环境,不同实例规格价差清晰,用户可根据自身业务负载与预算灵活选型。
1576 112
|
12天前
|
云安全 人工智能 运维
阿里云联动百位企业安全专家,共识Agent防御最佳实践
当Agent成为新员工,你的安全边界在哪里?
1942 8
阿里云联动百位企业安全专家,共识Agent防御最佳实践