数据类型——枚举

枚举是什么

在c#中,枚举(enumeration)是一种数据类型,和int、double、string等类型相似。枚举用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。例如一周有周一、周二……周日,则可定义一个枚举类型包括周一……周日七个取值。

枚举的声明

c#中枚举的声明关键字为enum

[public] enum 枚举名
{1,
	值2,
	值3,
	……
}

public:访问修饰符,公共的。可省略
enum:关键字,生命枚举类型
枚举名:符合Pascal明明规范

需要注意,枚举名一般声明在命名空间下面,因为这样可以让命名空间下面的类都可以应用到。
使用枚举时和其他数据类型一样:变量类型 变量名=值
举例子

using System;
namespace demo_1
{
//声明枚举类Week
    public enum Week
    {
        星期一,
        星期二,
        星期三,
        星期四,
        星期五,
        星期六,
        星期日,
    }
    class Program
    {
        static void Main(string[] args)
        {
        	//使用枚举 变量类型 变量名=值
            Week week = Week.星期一;
            Console.WriteLine(week);
        }
    }
}

这样就输出了枚举中的“星期一”。

枚举与其他数据类型的转换

与int类型转换

枚举类和int类型时兼容的,可以相互转换。

枚举转int

举例子

using System;
namespace demo_1
{
    public enum Week
    {
        星期一,
        星期二,
        星期三,
        星期四,
        星期五,
        星期六,
        星期日,
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine((int)Week.星期一);
        }
    }
}

输出0

继续测试

using System;
namespace demo_1
{
    public enum Week
    {
        星期一,
        星期二,
        星期三,
        星期四,
        星期五,
        星期六,
        星期日,
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine((int)Week.星期一);
            Console.WriteLine((int)Week.星期二);
            Console.WriteLine((int)Week.星期三);
            Console.WriteLine((int)Week.星期四);
            Console.WriteLine((int)Week.星期五);
        }
    }
}

输出在这里插入图片描述
改写枚举中的星期一为星期一=2,继续测试:

using System;
namespace demo_1
{
    public enum Week
    {
        星期一 = 2,//改写了
        星期二,
        星期三,
        星期四,
        星期五,
        星期六,
        星期日,
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine((int)Week.星期一);
            Console.WriteLine((int)Week.星期二);
            Console.WriteLine((int)Week.星期三);
            Console.WriteLine((int)Week.星期四);
            Console.WriteLine((int)Week.星期五);
        }
    }
}

输出在这里插入图片描述
总结:枚举类型默认是跟int类型互相兼容的,所以可以通过强制转换的语法互相转换,并且枚举转int时,枚举中的第一个量为0,其余一次递增。若给枚举中的量赋值,则转int时输出为赋给值,其余再次基础上依次递增。当转换一个枚举中没有的值的时候,不会抛异常,会将数字直接显示出来。int转枚举同理
double、float、decmial等同理。

int转枚举

举例子

using System;
namespace demo_1
{
    public enum Week
    {
        星期一,
        星期二,
        星期三,
        星期四,
        星期五,
        星期六,
        星期日,
    }
    class Program
    {
        static void Main(string[] args)
        {
            int n = 1;
            Console.WriteLine((Week)n);
        }
    }
}

输出星期二

将n改为8,继续测试

using System;
namespace demo_1
{
    public enum Week
    {
        星期一,
        星期二,
        星期三,
        星期四,
        星期五,
        星期六,
        星期日,
    }
    class Program
    {
        static void Main(string[] args)
        {
            int n = 8;//改为8
            Console.WriteLine((Week)n);
        }
    }
}

输出8

与string类型转换
枚举转字符串

使用ToString()
举例子


using System;
namespace demo_1
{
    public enum Week
    {
        星期一,
        星期二,
        星期三,
        星期四,
        星期五,
        星期六,
        星期日,
    }
    class Program
    {
        static void Main(string[] args)
        {
            Week week = Week.星期一;
            Console.WriteLine(week.ToString());
        }
    }
}

输出字符串星期一

字符串转枚举

使用Enum.Parse(typeof(枚举名),要转换的字符串)。注意,不存在Convert.ToEnum()
举例子

using System;
namespace demo_1
{
    public enum Week
    {
        星期一,
        星期二,
        星期三,
        星期四,
        星期五,
        星期六,
        星期日,
    }
    class Program
    {
        static void Main(string[] args)
        {
            string s = "0";
            Week week = (Week)Enum.Parse(typeof(Week), s);
            Console.WriteLine(week);
        }
    }
}

输出星期一

令s = “8”,继续测试

using System;
namespace demo_1
{
    public enum Week
    {
        星期一,
        星期二,
        星期三,
        星期四,
        星期五,
        星期六,
        星期日,
    }
    class Program
    {
        static void Main(string[] args)
        {
            string s = "8";//改成8
            Week week = (Week)Enum.Parse(typeof(Week), s);
            Console.WriteLine(week);
        }
    }
}

输出8

将s改为星期一,继续测试

输出星期一

将s改为星期八,继续测试

抛出异常

总结:枚举和string类型不兼容。字符串转枚举时,如果转换字符串是数字,即使枚举中没有该值,也不会抛出异常。如果转换的字符串是文本,如果枚举中没有则会抛出异常。

枚举的意义是什么

  • 提高代码维护性,确保变量合法。
    当一个团队开发一个项目的时候,代码的编写不是一个人的工作,是很多人的工作,即为致命的一点是每个人都有各自的编写习惯,例如定义“周一”的时候,有人会写成星期一,礼拜一等,这样在合成的时候就会很难麻烦。枚举就可以很好的解决这个问题。
  • 提高代码可读性
    使用的时候直接Week.星期一即可。
  • 提高代码键入。
  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值