Home Csharp枚举类型
Post
Cancel

Csharp枚举类型

enum 枚举

  1. 枚举用来定义常量值的集合。
  2. 枚举是不能继承的,所有值类型都不能继承。只是复用了继承的语法指定基础类型。
  3. 枚举可以是任意整型,在enum名称后加 : 指定整型类型
  4. 整型类型的位数决定了枚举的性能,及能容纳的值个数。
  5. 声明枚举时要提供 0 值代表 Unknown 或者 None
1
2
3
// 其他可用类型有:byte(1B)、sbyte、short、ushort、int(4B)、uint、long、ulong
public enum Month : int {
}

位标志

  1. 使用 [System.Flags] 特性, 可以把枚举作为位标志处理(不一定继承byte)。
  2. 位标志用于表示复合值(标志的集合)。其名称通常为复数。
  3. 位标志的每个值都要占用二进制的一位,所以能够容纳的值比较少。32位的 int 最多可以容纳32个标志枚举值。
1
2
3
4
5
6
7
8
9
10
11
12
[System.Flags]
public enum WeekDays
{
        None =      0x00,       //0000 0000 = 0
        Sunday =    0x01,       //0000 0001 = 1 << 0
        Monday =    0x02,       //0000 0010 = 1 << 1
        Tuesday =   0x04,       //0000 0100 = 1 << 2
        Wednesday = 0x08,       //0000 1000 = 1 << 3
        Thursday =  0x10,       //0001 0000 = 1 << 4
        Friday =    0x20,       //0010 0000 = 1 << 5
        Saturday =  0x40        //0100 0000 = 1 << 6
};

位标志操作

1
2
3
4
// 检测特定位是否存在
days.HasFlag(WeekDays.Sunday);
// 去掉位标志中的一个元素
days = days & (~WeekDays.Sunday)

位域的使用场景

  • Unity的 Layer 定义
  • 系统的访问权限
  • 执行状态
  • 文件的读写属性

enum 和 string 相互转换

  1. 枚举值转换成字符串(枚举名)
1
WeekDays.Sunday.ToString();
  1. 字符串转换成枚举值
1
2
// 转换失败返回false
bool success = System.Enum.TryParse("Monday", out WeekDays days);    

enum 与 int 相互转换

  1. 枚举值转换成整型
1
2
(int)Color.Red;
(byte)Color.Green;
  1. 整型转换成枚举值
1
2
3
4
// 可以强转
(Color)2;
// 也可以例用Enum的静态方法 
Color color = (Color)Enum.ToObject(typeof(Color), 2);
  1. 判断某个整型是否定义在枚举中
1
System.Enum.IsDefined(typeof(Color), 2);

遍历枚举值

1
2
3
4
foreach (Weekdays day in Enum.GetValues(typeof(Weekdays)))
{
	Debug.Log((int)day+ ":" + day);
}
This post is licensed under CC BY 4.0 by the author.
Contents