浅谈C#枚举类型

枚举(Enum),一个毫不起眼的小喽啰。

CSDN的描述如下:

enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型。
通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方便地访问它。 但是,还可以将枚举嵌套在类或结构中。
默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。 

其实这个已经够详细了。相信枚举大家都不陌生,只是这玩意不常用。

那么枚举有什么用呢?假设,你现在跟你的团队小组(3人)正在开发一个学生成绩管理系统。各自负责一个小模块。

你对于性别sex是这样定义的:

char s1 = ‘M‘;//男生 char s1 = ‘F‘;//女生
 

你的基友_one是这样描述的:

string str1 = "Male";//男生
string str2 = "Female";//女生

而你的基友_two是这样实现的:

string str1 = "男生";    string str2 = "女生";

嗯,大家发现问题没有?每个人对“性别”的描述都不一样,这就导致后期代码拼凑时,不可避免地出错。这又跟Enum有什么关系呢?

当然有,关系还挺大的,因为你可以如下定义:

public enum sex
{
  Male,
  Female
}

将性别定义为一个枚举类型,这样访问时,调用sex.Male/sex.Female,可以让我们很直观地知道,这一行代码是在调用到性别,这个东西。

那么如何用呢?如下:

sex s1 = sex.Male;//or
sex s2 = sex.Female;

具体的呢,可以将声明枚举类型写在Main()方法之外,namespace之内,这样会更合理。因为这样所有用户自定义的类,都可以调用到声明的枚举类型。

下面来介绍,枚举这东西与int ,string 这些类型的转换。

首先我们要知道一件事,C#里所有的类型都可以转换为string类型。如何转换,So easy~ ,直接调用 sex.Male.ToString();即可。

另外,我们要知道,C#中转换类型首先我们要判断类型间是否兼容,如果遇到int与double,decimal,long,short等的转换,只需要注意精度就可以。

如果是string转为int,则可能要用到以下三种方法:

1.使用Convert.ToInt32();
int i = Convert.ToInt32(str);//str代表某个字符串
2.使用int.Parse();
int i = int.Parse(str);//str代表某个字符串
3.使用int.TryParse();
int i = int.TryParse(str);//str代表某个字符串

所以,Enum类型转为string或int类型,代码如下,so easy too~

public Enum sex
{
  Male,
 Female
}
int i = (int)sex.Male;
Console.WriteLine(i);
string str = sex.Male.ToString();

但是,当遇到,string类型转为enum时,你就苦恼了,string str = "1"; sex.Male = str;? No,No,No,正确写法应该是:

string str = "1";
sex.Male = (sex)Enum.Parse(typeof(sex),str);

乍一看好像挺高端的样子,我们慢慢看来,

首先,typeof干嘛用的?简单来说就是获取当前枚举的类型。为什么要这样做呢?假设你现在有好多好多个枚举类型,什么 sex,weekend,1234...当你要对其中某一种类型

转换为string类型时,编译器是不知道你要对哪一个类型进行转换的。因此要用typeof()来获取当前要转换的枚举类型。

至于第二个参数,str只是我们所要转换的那个string变量。

所以,程序可以这样写:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Runtime.InteropServices;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7 namespace project
 8 {
 9     public enum sex
10     {
11          Male,
12          Female
13     }
14     public static void Main()
15    {
16         [DllImport("User32.dll")]
17         public static extern int MessageBox(
18            int h,
19            string m,
20            string c,
21            int type
22         )
23
24
25          try
26         {
27               string str = Console.ReadLine();
28               sex s = (sex)Enum.Parse(typeof(sex),str);
29               Console.WriteLine(s);
30         }
31          catch
32          {
33               MessageBox(0,"What you input is wrong ","Catch",3);
34          }
35    }
36 }            

对于,str变量,你可以输入0/1,或者Male/Female,如果输入的变量不是前边几种的话,默认程序就会报错,上边这程序是调用了动态链接库里的MessageBox函数来显示

一个错误消息。

至此,枚举类型介绍完毕。因为在下才疏学浅,如有误导之处,还望海涵指出,以便你我增进知识。

转载请首行声明:http://www.cnblogs.com/gu-zhan/  --- 咸叔专属

时间: 2024-10-03 13:46:49

浅谈C#枚举类型的相关文章

浅谈c#枚举

结构中的成员可以赋值,枚举呢....是取值,只读的 以下情况可以考虑将类创建为结构:(1)如果一个类其中的字段非常少,所有字段占用的内存总量不超过8.16字节:(2)如果一个类中的字段都是值类型: 关于枚举,则是当你需要一个有限的整数序列时使用.使用枚举可以将值限定为特定的几个值,同时可以利用.net类型检查系统在编译阶段就识别出不合法的值.这显然比你直接使用整数可读性高了很多,也降低了(几乎消除)错误代码的可能性. 浅谈C#中的枚举 枚举类型是一种的值类型,它用于声明一组命名的常数.(1)枚举

浅谈java枚举类

先来一段常用枚举类代码结构 public enum Color { //枚举对象 RED(1,"红色"),GREEN(2,"绿色"),BLUE(3,"蓝色"); //私有成员属性 private int index; private String name; //私有构造方法 private Color(int index, String name) { this.index = index; this.name = name; } //公共的g

浅谈java编码类型

最近在学习IO技术的时候总是出现乱码问题,最后请教大神才知道是文件编码的不同才导致的乱码.为了避免下次出现乱码,这里对编码问题做个总结,因为本人初学,难免会有遗漏或错误,欢迎各路大虾指正. 首先来看下什么是编码 我们知道计算机在表示我们人类语言的时候用的是字节——也就是二进制,但由于人类的语言太多,无法用byte来表示,所以就需要把人类语言拆分转化为二进制,这就出现了编码.这就好比我们要将汉语转化为英语,翻译的过程就是编码.编码常见的有常见的有 ASCII.ISO-8859-1.GB2312.G

昊天善圈区浅谈比特币这个类型区块链应用技术的特点及作用

比特币是一种分期数字货币,可以说是区块链技术应用的典型案例,比特币是一种"稀缺资产",需要通过"数字挖掘"(挖矿)来创建,比特币由于资源稀缺,从出现到现在价值已上升了几百倍.比特币可以用于收集和交易.比特币出现开创了区块链应用技术,区块链应用技术是一种点对点的电子现金系统,他不基于信用,而是基于密码学原理,只要双方达成任何一致就可以直接进行支付.比特币这种类型的区块链系统并不需要通过银行等第三方中介参与.利用比特币这种类型的区块链技术系统,进行境外转帐时,还可以节省

浅谈建材类型的网站应该选择哪些有效的外链平台

随着互联网的发展,SEO行业在不断的被人们所熟知,从一个普通的公司到一个中小型的企业都在使用SEO来优化网站,可想而知SEO这门技术已经被企业所重视,近期,笔者一直在负责优化建材类型的企业网站,从结构优化到页面优化到内容优化再到外链建设这块,笔者总结出了不少经验心得,然而对外链这方面因百度绿萝算法让笔者优化的思路出现了短路,后来跟一些同行的站长们交流了下并实战了下,发现对建材类网站的效果不错,然后总结出了四个对外链建设有用的方法,下面就由笔者跟各位建材网站的站长们浅谈下建材类型的网站应该选择哪些

浅谈C#中的值类型和引用类型

在C#中,值类型和引用类型是相当重要的两个概念,必须在设计类型的时候就决定类型实例的行为.如果在编写代码时不能理解引用类型和值类型的区别,那么将会给代码带来不必要的异常.很多人就是因为没有弄清楚这两个概念从而在编程过程中遇到了很多问题,在这里博主浅谈对值类型和引用类型的认识. 首先从概念上看,值类型直接存储其值,而引用类型存储对其值的引用.从而这两种类型存储在内存的不同地方. 其次从内存空间上看,值类型是在栈中操作,而引用类型则在堆中分配存储单元. 栈在编译的时候就分配好内存空间,在代码中有栈的

【.Net】浅谈C#中的值类型和引用类型

在C#中,值类型和引用类型是相当重要的两个概念,必须在设计类型的时候就决定类型实例的行为.如果在编写代码时不能理解引用类型和值类型的区别,那么将会给代码带来不必要的异常.很多人就是因为没有弄清楚这两个概念从而在编程过程中遇到了很多问题,在这里博主浅谈对值类型和引用类型的认识. 首先从概念上看,值类型直接存储其值,而引用类型存储对其值的引用.从而这两种类型存储在内存的不同地方. 其次从内存空间上看,值类型是在栈中操作,而引用类型则在堆中分配存储单元. 栈在编译的时候就分配好内存空间,在代码中有栈的

浅谈java中的枚举类型(转)

用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强. enum Signal { GREEN, YELLOW, RED } pu

浅谈 js 数字格式类型

原文:浅谈 js 数字格式类型 很多人也许只知道 123,123.456,0xff 之类的数字格式.其实 js 格式还有很多数字格式类型,比如 1., .1 这样的,也有 .1e2 这样的. 可能有人说这是什么个格式?其实还不止呢.1          //11.2       //1.21.2e3    //12001.2e+3  //12001.2e-3  //0.0012.12e+2 //12-.12e-2 //-0.0012 当然这些只是十进制.我们来说说 八进制 和 十六进制.0x00