枚举
语法:
[public] enum 枚举名(又叫枚举类型)
{
值1,
值2,
值3,
....
}
public:访问修饰符,
enum 关键字,声明枚举的关键字
枚举名: 要符合Pascal命名规范
为什么使用枚举?
多人共同开发一个项目,如性别每个人的写法都不同把项目和到一起老是出错,用枚举类型可以统一写死一些小项目中都要用到的变量如性别,
枚举类型默认可以和int类型相互转换,枚举类型和int类型是兼容的
将枚举声明到命名空间的下面,类的外面,表示这个命名空间下,所有的类都可以使用这个枚举。
类型转换:字符串中的值若是数字类型,数字类型的字符串在枚举值的范围中时,可以强制转换成枚举类型输出枚举值。数字超出枚举范围时原样输出数字
字符串若是一段字符串时,字符串内容要是枚举中那些值时会输出枚举值,若不是则抛出异常
枚举就是一个变量类型 ,int--double string decimal.
只是枚举声明、赋值、使用的方式跟那些普通的变量类型不一样。
用枚举统一写死一些共用的变量:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 枚举
{
public enum Gender
{
男,
女
}
class Program
{
static void Main(string[] args)
{
//char gender = '男';
//string sex = "female";
//string s1 = "汉子";
Gender gender = Gender.男;//枚举名点出来
}
}
}
枚举与int的类型兼容:枚举中的值与0123456.....相对应
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 枚举类型与int类型兼容
{
public enum QQState
{
OnLine,
OffLine,
Leave,
Busy,
QMe
}
class Program
{
static void Main(string[] args)
{
QQState state = QQState.OnLine;//枚举类型默认可以和int类型相互转换,枚举类型和int类型是兼容的
int n = (int)state;
Console.WriteLine(n);
Console.WriteLine((int)QQState.OffLine);
Console.WriteLine((int)QQState.Leave);
Console.WriteLine((int)QQState.Busy);
Console.WriteLine((int)QQState.QMe);
Console.ReadKey();
}
}
}
运行结果:
枚举与int类型兼容2:当我们给枚举值一个整数时会影响枚举对应的int值
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 枚举与int类型兼容2
{
public enum QQState
{
OnLine,
OffLine=2,
Leave,
Busy=8,
QMe
}
class Program
{
static void Main(string[] args)
{
QQState state = QQState.OnLine;//枚举类型默认可以和int类型相互转换,枚举类型和int类型是兼容的
int n = (int)state;
Console.WriteLine(n);
Console.WriteLine((int)QQState.OffLine);
Console.WriteLine((int)QQState.Leave);
Console.WriteLine((int)QQState.Busy);
Console.WriteLine((int)QQState.QMe);
Console.ReadKey();
}
}
}
运行结果:
int类型转换成枚举:当转换一个枚举中没有的值的时候,不会抛异常,而是直接将数字显示出来。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace int类型转换成枚举
{
public enum QQState
{
OnLine=1,
OffLine,
Leave,
Busy,
QMe
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine((int)QQState.OnLine);
Console.WriteLine((int)QQState.OffLine);
Console.WriteLine((int)QQState.Leave);
Console.WriteLine((int)QQState.Busy);
Console.WriteLine((int)QQState.QMe);
Console.WriteLine("=======分割线======\n\n\n");
int n = 3;
QQState state = (QQState)n;
Console.WriteLine(state);
Console.WriteLine("=======分割线======\n\n\n");
int n1 = 7;
QQState state2 = (QQState)n1;
Console.WriteLine(state2);
Console.ReadKey();//遇见转换不了的输出原来的数
}
}
}
运行结果:
字符串转枚举值:字符串中的值若是数字类型,数字类型的字符串在枚举值的范围中时,可以强制转换成枚举类型输出枚举值。数字超出枚举范围时原样输出数字,字符串若是一段字符串时,字符串内容要是枚举中那些值的(OnLine, OffLine,Leave,Busy,QMe)值时会输出枚举值,若不是则抛出异常
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace string类型转换成枚举
{
public enum QQState
{
OnLine = 1,
OffLine,
Leave,
Busy,
QMe
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("下面是枚举对应的整数值");
Console.WriteLine((int)QQState.OnLine);
Console.WriteLine((int)QQState.OffLine);
Console.WriteLine((int)QQState.Leave);
Console.WriteLine((int)QQState.Busy);
Console.WriteLine((int)QQState.QMe);
Console.WriteLine("======分割线======\n\n");
string str = "1";//字符串中的值若是数字,数字在枚举的范围中时,输出枚举值。数字超出枚举范围时原样输出数字
//QQState state5 = (QQState)s;//转换不了因为不兼容
//调用Parse()方法的目的就是为了让它帮助我们将一个字符串转换成对应的枚举类型
QQState state = (QQState)Enum.Parse(typeof(QQState), str);
Console.WriteLine(state+": 我是由字符串\"1\"转换而来的");
Console.WriteLine("======分割线======\n\n");
string str1 = "6";
QQState state1 = (QQState)Enum.Parse(typeof(QQState), str1);
Console.WriteLine(state1+": 我是原样输出的");
Console.WriteLine("======分割线======\n\n");
string str2 = "OnLine";
QQState state2 = (QQState)Enum.Parse(typeof(QQState),str2);
//QQState state1 = (QQState)str1;//转换不了不兼容
Console.WriteLine(state2 + ": 我是由字符串\"OnLine\"转换而来的");
//字符串若是一段字符串时,要是枚举中那些(OnLine, OffLine,Leave,Busy,QMe)值时会输出枚举值,若不是则抛出异常
Console.ReadKey();
}
}
}
运行结果:
枚举的练习:1、提示用户选择一个在线状态,我们接收,并将用户得的输入转换城枚举类型2、将枚举类型再次打印到控制台
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 枚举3练习
{
public enum QQState
{
OnLine=1,
OffLine,
Leave,
Busy
}
class Program
{
static void Main(string[] args)
{
//提示用户选择一个在线状态,我们接收,并将用户得的输入转换城枚举类型
//再次打印到控制台
while (true)
{
Console.WriteLine("请选择你的在线状态,\n 1-OnLine\n 2-OffLine\n 3--Leave\n 4--Busy\n 5--退出");
string inpout = Console.ReadLine();
if (int.Parse(inpout) == 5)
{
return;
}
else
{
switch (inpout)
{
case "1": QQState s1 = (QQState)Enum.Parse(typeof(QQState), inpout);
Console.WriteLine("你的QQ状态是:\n" + s1);
break;
case "2": QQState s2 = (QQState)Enum.Parse(typeof(QQState), inpout);
Console.WriteLine("你的QQ状态是:\n" + s2);
break;
case "3": QQState s3 = (QQState)Enum.Parse(typeof(QQState), inpout);
Console.WriteLine("你的QQ状态是:\n" + s3);
break;
case "4": QQState s4 = (QQState)Enum.Parse(typeof(QQState), inpout);
Console.WriteLine("你的QQ状态是:\n" + s4);
break;
}
Console.ReadKey();
Console.WriteLine("\n");
}
}
}
}
}
运行结果: