苏飞论坛
标题: [C#基语法]之C#枚举类型深入浅出 [打印本页]
作者: 站长苏飞 时间: 2013-5-27 09:49
标题: [C#基语法]之C#枚举类型深入浅出
[C#基语法]之C#枚举类型深入浅出
系列文章导航
[C#基语法]苏飞传奇版 http://www.sufeinet.com/thread-3091-1-1.html
先来看看给它下的定义和规则
1.C#枚举类型是一种值类型,它用于声明一组命名的常数。
2.枚举的成员是该枚举类型的命名常数。任意两个枚举成员不能具有相同的名称。每个枚举成员均具有相关联的常数值。此值的类型就是枚举的基础类型。每个枚举成员的常数值必须在该枚举的基础类型的范围之内。
3.枚举类型能选择的基础类型有:byte,sbyte,shout,ushout,int,uint,long,ulong ,默认的为int
语法
[C#] 纯文本查看 复制代码
访问修辞符 enum 枚举名:基础类型
{
枚举成员
}
我们以颜色类型为例子来设置一个枚举
比如有Red,Blue,Orange三种颜色
1.直接显式设置类型
[C#] 纯文本查看 复制代码
/// <summary>
/// 颜色枚举
/// </summary>
public enum SkinType : int
{
/// <summary>
/// Red
/// </summary>
Red = 1,
/// <summary>
/// Blue
/// </summary>
Blue = 2,
/// <summary>
/// Orange
/// </summary>
Orange = 3
}
这样是显式设置了枚举的基础类型
当然默认的也是int类型。
2.以默认值方式设置枚举类型的值
[C#] 纯文本查看 复制代码
/// <summary>
/// 颜色枚举
/// </summary>
public enum SkinType : int
{
/// <summary>
/// Red
/// </summary>
Red,
/// <summary>
/// Blue
/// </summary>
Blue,
/// <summary>
/// Orange
/// </summary>
Orange
}
在枚举类型中声明的第一个枚举成员它的默值为零。
以后的枚举成员值是将前一个枚举成员(按照文本顺序)的值加 1 得到的。这样增加后的值必须在该基础类型可表示的值的范围内;否则,会出现编译时错误。
Red=0
Blue=1
Orange=2
这样是不是也很方便
用法
使用方法其实也很简单,就像使用属性一样
[C#] 纯文本查看 复制代码
string colorName = "";
//获取颜色的名称
switch (SkinType)
{
case SkinType.Red:
colorName = "Red";
break;
case SkinType.Blue:
colorName = "Blue";
break;
case SkinType.Orange:
colorName = "Orange";
break;
default:
colorName = "";
break;
}
获取值
[C#] 纯文本查看 复制代码
int SkinValue = 0;
//获取颜色的值
switch (SkinType)
{
case SkinType.Red:
SkinValue = Convert.ToInt32(SkinType.Red);
break;
case SkinType.Blue:
SkinValue = Convert.ToInt32(SkinType.Blue);
break;
case SkinType.Orange:
SkinValue = Convert.ToInt32(SkinType.Orange);
break;
default:
SkinValue = 0;
break;
}
好处和为什么要使用枚举类型
1.在写代码上比较规范这是我的认知,再就是非常的方便 ,比如上面的switch 语句中,下面的每个Case可不是我写出来是自动生成的,只要你填写一个枚举类型,下面的Case是可以自动生成的,很方便
2.用字符和汉字代替数字方便识别
3.其实呢我自己使用枚举,并没有特别的意思就是感觉写起来有结构化,后期使用方法,不需要去记一个0代表什么1代表什么2代表什么的数字状态了。
而是直接看名称就知道是什么意思。
大家说说自己的看法吧。
作者: SillyPGM 时间: 2013-5-27 09:58
支持飞哥,精品越出越多,在论坛学到了很多东西。
作者: 站长苏飞 时间: 2013-5-27 10:08
SillyPGM 发表于 2013-5-27 09:58
支持飞哥,精品越出越多,在论坛学到了很多东西。
大家相互交流我也是为了提高自己
作者: gangn 时间: 2013-7-4 12:25
支持飞哥
作者: 站长苏飞 时间: 2013-7-4 12:28
谢谢
作者: jjloveC# 时间: 2013-7-5 17:36
好久没来了,{:soso_e113:}···顶一个,学习了
作者: 我来求学 时间: 2013-7-9 10:25
前面定义了 int SkinValue,为什么后面还要转换啊 SkinValue =Convert.ToInt32
作者: 赖同志 时间: 2013-7-26 11:56
建议飞哥在最后结束的时候附上运行结果~让新人看得更清晰!
作者: 赖同志 时间: 2013-7-26 12:01
希望飞哥能在最后附上运行效果图...
作者: 站长苏飞 时间: 2013-7-26 12:14
截图的方法不利的Seo优化,而且不方便用户复制
但是阅读确实好
只是这里个文章大部分是不需要运行的。
以后再写的时候我尽量把文字和截图都发上来。
感谢你的建议
作者: Mr_King 时间: 2013-8-2 15:49
又学到了!谢谢飞哥
作者: toby875187 时间: 2013-8-20 11:27
支持飞哥!!
作者: 站长苏飞 时间: 2013-8-20 11:32
@Mr_King @toby875187
谢谢,以后常来转转
作者: 南方 时间: 2013-8-28 11:47
枚举还有一种用法,称为标志枚举. [Flags]
public enum 名称
{
中 = 1,
国 = 2,
人 = 4
}
名称 enUm = 名称.中 | 名称.国;
console.WriteLine(enUm) 就有两种值.
如果要判断直接"&"按位与
作者: cc1027cc 时间: 2013-9-6 08:35
受教了,学习中……
作者: abc 时间: 2013-11-10 18:20
好好学习,天天向上
作者: 坏小孩 时间: 2013-11-10 23:55
飞哥、、、、“ SkinValue = Convert.ToInt32(SkinType.Red);”这个在前面不是有定义了int(red、blue、orange) 了么、后面还需要有nvert。toint32()转换么??
作者: ^陪妳ソ看日落 时间: 2013-11-21 15:52
强烈支持楼主ing……
作者: lewis_fang 时间: 2013-12-13 11:53
加油,我们都看好你哦。
作者: _tawtg 时间: 2014-1-10 11:59
还有一种枚举是标志位枚举,可以提供枚举值之间的与运算。
作者: dadaboy 时间: 2014-2-18 20:45
受教了,学习中……
作者: Homeless 时间: 2014-2-23 03:27
受教了,学习中……
作者: 蓝天白云 时间: 2014-3-12 16:03
没事就看看基础,每次收获都不一样
作者: superai 时间: 2014-3-13 09:59
OMG~~在这遇到你~~~~~这世界真小
作者: yyyyyy 时间: 2014-3-14 09:33
飞哥 谢谢了
作者: SillyPGM 时间: 2014-3-19 17:11
飞机,你个仔,忙啥呢。
作者: superai 时间: 2014-3-21 08:58
上班啊~~C#學得怎麼樣了?
作者: loarder 时间: 2014-3-25 17:50
case语句如何自动生成,求教
作者: 站长苏飞 时间: 2014-3-25 17:53
自动生成?你如果是枚举的话直接按两次Tab键就行了,如果是其他类型只能手写
作者: loarder 时间: 2014-3-25 17:55
会了谢谢
作者: loarder 时间: 2014-3-25 19:10
求教,在switch语句中的判定语句已经写明了SkinType.Blue那么这个switch语句还有什么意义?
作者: 站长苏飞 时间: 2014-3-25 22:40
测试例,笔误哈哈
作者: 风动鸣 时间: 2014-3-30 03:03
新手前来学习
作者: lovebeyond 时间: 2014-4-1 17:25
膜拜中……
作者: hzq1984 时间: 2014-5-16 14:30
本帖最后由 hzq1984 于 2014-5-16 14:48 编辑
c#我以前不常用,最近做项目要用到,所以开始自学!
看完楼主的文章,想到应该还能更多一点点的,所以我就写出来,当再一次复习一下,
,希望论坛越办越好!
作者: hzq1984 时间: 2014-5-16 14:37
[ 本帖最后由 hzq1984 于 2014-5-16 14:38 编辑 ]\n\n如何去的枚举类型的所有值和所有名称呢?
[C#] 纯文本查看 复制代码
static void Main(string[] args)
{
//取得所有名称
foreach (var c in Enum.GetNames(typeof(Color)))
{
Console.WriteLine(c);
}
//取得所有值
foreach (int c in Enum.GetValues(typeof(Color)))
{
Console.WriteLine(c);
}
Console.Read();
}
public enum Color : int
{
red=2,
green=4,
yellow=8
//...
}
作者: guanhongchao 时间: 2014-6-18 17:20
飞哥你好,我也是刚刚自学C#,我看到很多人都问,前面定义了 int SkinValue,为什么后面还要转换,我理解是red是字符串,不是int 类型,所以其实转换的是red字符串到int类型,不知道我理解的有没有问题。虚心请教!
作者: guanhongchao 时间: 2014-6-18 17:26
受教了,学习中……
作者: guanhongchao 时间: 2014-6-18 17:30
飞哥你好,我也是刚刚自学C#,看到很多人问到前面定义了 int SkinValue,为什么后面还要转换,我的理解是,转换时把 red 字符串转换成int,不知道我的理解是否正确,虚心请教。
作者: yuan88008 时间: 2015-10-17 08:33
讲的好啊
作者: inciting 时间: 2015-11-5 11:58
楼主加油
作者: mxlwin 时间: 2016-6-10 11:53
NO.3 C# 枚举类型深入浅出 ~学习完毕
作者: 雕兄007 时间: 2018-8-11 14:51
楼主加油,我们都看好你哦。
欢迎光临 苏飞论坛 (http://www.sufeinet.com/) |
Powered by Discuz! X3.4 |