c# Enum

看如下两段代码,比较:

第一段:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            public enum Direction
            {
                North,
                South,
                East,
                West
            }
            int i=(int)Direction.North;//错误, 非静态的字段、方法或属性要求对象引用 
            int j=(int)Direction.East;
            string s=Convert.ToString(Direction[3]);//错误 , “ConsoleApplication2.Program.Direction”是“类型”,但此处被当做“变量”来使用
            Console.WriteLine(i);//此处错误,原因是对方法不能直接使用,需要在别处对其调用
            Console.WriteLine(j);
            Console.WriteLine(s);
        }
    }
}

第二段:

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace ConsoleApplication1
{
    class FirstProgram
    {
        public static void Main(string[] args)
        {
            Console.WriteLine(i);
            Console.WriteLine(j);
            Console.WriteLine(s);
        }
            public enum Direction
            {
                North=0,
                South=1,
                East=2,
                West=3
            }
            static int i = (int)Direction.North;
            static int j = (int)Direction.South;
            static string s = Convert.ToString(Direction.North);
        }
    }

### C# 中枚举 (Enum) 的基本概念 在 C# 中,`enum` 是一种特殊的数据类型,用于定义一组命名的常量。通过使用 `enum`,可以提高代码的可读性和维护性,因为它们允许开发者以更具描述性的名称来表示整数值。 #### 枚举的基础语法 以下是创建和使用枚举的一个简单例子: ```csharp // 定义一个名为 Color 的枚举 public enum Color { Red, Green, Blue } ``` 默认情况下,第一个成员被赋值为 0,后续成员依次递增[^1]。因此,在上述示例中: - `Color.Red` 对应于值 0, - `Color.Green` 对应于值 1, - `Color.Blue` 对应于值 2。 如果需要指定自定义值,则可以通过显式赋值实现: ```csharp public enum DaysOfWeek : byte { Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6, Sunday = 7 } ``` 在此处,`DaysOfWeek` 被声明为字节类型 (`byte`) 并赋予特定值。 #### 使用枚举 一旦定义好了一个枚举类型,就可以像其他任何数据类型一样对其进行操作。下面是一个简单的程序片段展示如何利用前面提到的颜色枚举: ```csharp class Program { static void Main() { Color selectedColor = Color.Green; switch(selectedColor) { case Color.Red: Console.WriteLine("The color is red."); break; case Color.Green: Console.WriteLine("The color is green."); // 输出此句 break; default: Console.WriteLine("Unknown color"); break; } int valueOfGreen = (int)selectedColor; // 显式转换成整数 Console.WriteLine($"Value of Green as integer: {valueOfGreen}"); string nameOfColor = Enum.GetName(typeof(Color), selectedColor); Console.WriteLine($"Name of the current color: {nameOfColor}"); Console.ReadKey(); } } ``` 这段代码展示了几个重要的特性:switch-case 结构可以直接比较枚举变量;也可以将枚举值强制转换为其基础整型形式;还可以借助反射机制获取某个具体枚举项的名字字符串。 #### 枚举与标志位(Flags) 有时我们需要组合多个选项在一起形成复合状态,这正是 `[Flags]` 属性发挥作用的地方。它使得单个字段能够存储多选设置的信息集合。 ```csharp [Flags] public enum Permissions { None = 0b0000, Read = 0b0001, Write = 0b0010, Execute = 0b0100, All = 0b0111 } static void Main(string[] args) { var permissionSet = Permissions.Read | Permissions.Execute; if ((permissionSet & Permissions.Read) != 0) Console.WriteLine("Read access granted."); if (!permissionSet.HasFlag(Permissions.Write)) Console.WriteLine("Write not allowed."); foreach(var perm in Enum.GetValues(typeof(Permissions))) Console.WriteLine(((Permissions)perm).ToString()); } ``` 这里演示了如何运用按位逻辑运算符构建权限集以及测试是否存在某一项许可权能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值