关于枚举用法的小笔记

最近因为经常需要使用枚举来进行操作,所以记录一下经常用到的一些枚举的用法.

什么是枚举

首先枚举是一组命名整型常量。枚举类型是使用enum关键字声明的。
C#枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。

public enum <enum_name>{
	enumeration list
}
// eg:
public enum Days{ Sun, Mon, tue, Wed, thu, Fri, Sat }

枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值.默认情况下,第一个枚举符号的值是0.

为枚举提供友好的显示

枚举在控制显示上可以通过Attribute 注解来进行显示的优化,例如:

public enum Days{
	[StringValue("周日")]
	Sun = 0,
	[StringValue("周一")]
	Mon=1,
	[StringValue("周二")]
	Tue=2,
	[StringValue("周三")]
	Wed=3,
	[StringValue("周四")]
	Thu=4,
	[StringValue("周五")]
	Fir=5,
	[StringValue("周六")]
	Sat=6
}

然后添加一个扩展方法

public static class ExtensionMethods
    {
        public static string GetStringValue(this System.Enum value)
        {
            string stringValue = value.ToString();
            Type type = value.GetType();
            FieldInfo fieldInfo = type.GetField(value.ToString());
            StringValue[] attrs = fieldInfo.
                GetCustomAttributes(typeof(StringValue), false) as StringValue[];
            if (attrs.Length > 0)
            {
                stringValue = attrs[0].Value;
            }
            return stringValue;
        }
    }

使用方式如下:

var sunStr = Days.Sun.GetStringValue();
//  sunStr 的值将会是 "周日"

枚举、字符串、值的相互转换

还是对于Days这个枚举,下面则是相互转换的关系表达

		Days day  =  Days.Sun
       string  dayString  =   " Mon " ;
       int  dayValue  =   2;
 
       // 枚举转字符串 
       string  enumStringOne  =  day.ToString(); //效率低,不推荐
       string  enumStringTwo  =  Enum.GetName( typeof (Days), day);//推荐
       
       // 枚举转值 
       int  enumValueOne  =  day.GetHashCode();
       int  enumValueTwo  =  ( int )day;
       int  enumValueThree  =  Convert.ToInt32(day);
 
       // 字符串转枚举 
      Days enumOne  =  (Days)Enum.Parse( typeof (Days), dayString);
 
       // 字符串转值 
       int  enumValueFour  =  ( int )Enum.Parse( typeof (Days), dayString);
 
       // 值转枚举 
      Days enumTwo  =  (Days)dayValue;
      Days enumThree  =  (Days)Enum.ToObject( typeof (Days), dayValue);
 
       // 值转字符串 
       string  enumStringThree  =  Enum.GetName( typeof (Days), dayValue)
### 枚举的使用示例与相关资料 #### 枚举的基本概念 枚举是一种用于定义一组固定值的数据类型。它通常被用来替代硬编码的整数或其他基本类型的值,从而提高代码的可读性和安全性[^3]。 在某些编程语言中,如 Java 和 C++,枚举可以直接通过关键字 `enum` 定义并赋予特定含义。而在其他语言中,比如 Go,则需要借助常量组合的方式模拟枚举的行为[^2]。 以下是几种常见编程语言中关于枚举使用的具体示例: --- #### Python 中的枚举实现 Python 提供了标准库模块 `Enum` 来支持枚举功能。下面是一个简单的扑克牌花色枚举示例: ```python from enum import Enum class Suit(Enum): DIAMONDS = 1 # 方块 CLUBS = 2 # 梅花 HEARTS = 3 # 红心 SPADES = 4 # 黑桃 print(Suit.DIAMONDS.name) # 输出: DIAMONDS print(Suit.DIAMONDS.value) # 输出: 1 ``` 上述代码展示了如何利用 Python 的 `Enum` 类型来定义一套固定的值集合,并访问其名称和对应的实际值。 --- #### C++ 中的枚举行为 C++ 支持传统的枚举以及强类型化的现代枚举语法。传统枚举会隐式转换为整数形式,而新式的 `enum class` 则更加严格地限制这种转化关系[^5]。 以下是比较两者的区别: ```cpp // 传统枚举 enum Color { RED, GREEN, BLUE }; Color example_color = GREEN; std::cout << static_cast<int>(example_color) << std::endl; // 输出: 1 // 强类型化枚举 (推荐) enum class Direction { NORTH, SOUTH, EAST, WEST }; Direction d = Direction::NORTH; if(d == Direction::NORTH){ std::cout << "Moving North!" << std::endl; } ``` 这里需要注意的是,默认情况下,C++ 枚举成员是从零开始编号的连续整数值序列。 --- #### Go 语言中的伪枚举设计 尽管 Go 并未原生支持枚举结构体,但开发者仍然能够通过 iota 自动增量机制配合 const 块构建类似的逻辑体系: ```go package main import ( "fmt" ) const ( Diamonds = iota + 1 // 方块 Clubs // 梅花 Hearts // 红心 Spades // 黑桃 ) func main() { fmt.Println(Diamonds, Clubs, Hearts, Spades) // 打印结果分别为:1 2 3 4 } ``` 此方法不仅简洁明了而且易于维护扩展,非常适合那些希望保持一致性却又受限于底层工具链特性的场景需求。 --- #### 总结 无论是在何种开发环境下工作,合理运用好枚举这一特性都能够极大地提升软件质量水平。当面对有限范围内的选项列表时,请优先考虑采用枚举代替松散分布在整个项目里的字面常量声明策略^。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值