C# 枚举(enum)

C# 中,枚举(enum)是一种特殊的值类型,它由一组命名的整数常量组成。使用枚举可以让代码更加清晰和易于维护。枚举是通过关键字 enum 定义的,并且每个枚举类型都基于一个整数类型,比如 int,但可以指定为其他整数类型如 byte、short、long 等。选择合适的类型可以节省内存。本文主要介绍C# 枚举(enum) 。

1、枚举(enum)

enum是一个特殊的类,代表一组常量(不可更改的变量,如,const变量)。

要创建enum,请使用enum关键字(而不是类或接口),并用逗号分隔常量。请注意,它们应使用大写字母:

例如:

访问enum中常量可以使用.的方式访问:

enum Level {
LOW,
MEDIUM,
HIGH
}

如访问枚举类型LevelLOW则使用Level.LOW

2、类中定义枚举

还可以在类中包含一个enum

例如,

using System;
namespace cjavapy
{
    public class EnumDemo
    {
        enum Level
        {
            LOW,
            MEDIUM,
            HIGH
        }
        public static void Main(string[] args)
        {
            Level myVar = Level.MEDIUM;
            Console.WriteLine(myVar);
        }
    }
}

3、switch语句中的enum

枚举常用于switch语句中,来判断相应的值:

例如,

using System;
namespace cjavapy
{
    enum Level
    {
        LOW,
        MEDIUM,
        HIGH
    }
    public class EnumDemo
    {
        public static void Main(string[] args)
        {
            Level myVar = Level.MEDIUM;
            switch (myVar)
            {
                case Level.LOW:
                    Console.WriteLine("Low level");
                    break;
                case Level.MEDIUM:
                    Console.WriteLine("Medium level");
                    break;
                case Level.HIGH:
                    Console.WriteLine("High level");
                    break;
            }
        }
    }
}

4、循环遍历枚举类型

枚举类型具有Enum.GetValues()方法,该方法返回所有枚举常量的数组。 当要遍历枚举的常量时,此方法很有用:

例如,

for(Level myVar :  Enum.GetValues(typeof(Level))){
Console.WriteLine(myVar);
}

5、枚举与类之间的区别

枚举可以像class一样具有属性和方法。唯一的区别是枚举常量是不可更改,不能用于创建对象,并且不能扩展其他类(但可以用扩展方法方式实现接口功能)。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
  
     public enum Color
     {
         Red,
         Green,
         Blue
     }
     
     public interface IColorCode
     {
         string GetColorCode();
     }
     
     public static class ColorExtensions
     {
         public static string GetColorCode(this Color color)
         {
             switch (color)
             {
                 case Color.Red:
                     return "#FF0000";
                 case Color.Green:
                     return "#00FF00";
                 case Color.Blue:
                     return "#0000FF";
                 default:
                     throw new ArgumentOutOfRangeException(
                       nameof(color),      color, null);
             }
         }
     }

    class Program
    {
        static void Main(string[] args)
        {
            Color c = Color.Green;
            Console.WriteLine(c.GetColorCode());
            Console.ReadKey();
        }
    }
}
推荐阅读
cjavapy编程之路首页