惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Stack Overflow Blog
Stack Overflow Blog
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
T
The Blog of Author Tim Ferriss
博客园 - 叶小钗
N
Netflix TechBlog - Medium
腾讯CDC
C
Check Point Blog
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
S
SegmentFault 最新的问题
F
Fortinet All Blogs
美团技术团队
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 司徒正美
F
Full Disclosure
Recorded Future
Recorded Future
D
DataBreaches.Net
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
J
Java Code Geeks
I
InfoQ
Y
Y Combinator Blog
A
About on SuperTechFans
AI
AI
爱范儿
爱范儿
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Forbes - Security
Forbes - Security
W
WeLiveSecurity
M
MIT News - Artificial intelligence
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
Schneier on Security
Schneier on Security
The GitHub Blog
The GitHub Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
GRAHAM CLULEY
Know Your Adversary
Know Your Adversary
Latest news
Latest news
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Docker
Recent Commits to openclaw:main
Recent Commits to openclaw:main
量子位
V2EX - 技术
V2EX - 技术
Project Zero
Project Zero

博客园 - yunshu

(转帖)C/S、B/S及三层结构漫谈 TP-Link 配置(转帖) 如何用VSS VS2005重置按钮代码 asp.net 2.0 网站导航控件 WEB自定义控件小记 VS2005 DataGridView 和 GirdView 横向大比拼 web.config中连接字符串与数据库登陆方式的联系 转帖-win2003各版本的区别 您没有调试该服务器的权限,验证您是服务器“Debugger Users”组的成员 错误:未将对象引用设置到对象的实例 在绑定DataGrid控件,做添加删除时遇到问题(数组越界) visual studio.net已检测到指定的web服务器运行的不是asp.net1.1版。 request('id')语句,返回的是什么类型的数据 [WebMethod] 是什么意思? 如何在DataSet中追加记录 怎样添加本地web引用 创建XML文件的两种方法 什么是DOM?
枚举类型是什么意思,怎么用?
yunshu · 2008-03-12 · via 博客园 - yunshu

枚举类型是什么意思,怎么用?

enum 比如有东,南,西,北四个方向,你会怎么设计类型呢?
用枚举
enum Direction
{
East,South,West,North
};
枚举主要用于某些有特定意义的东西

浅谈C#中的枚举 
枚举类型是一种的值类型,它用于声明一组命名的常数。 
(1)枚举的声明:枚举声明用于声明新的枚举类型。 
访问修辞符 enum 枚举名:基础类型 

枚举成员 

基础类型必须能够表示该枚举中定义的所有枚举数值。枚举声明可以显式地声明 byte、sbyte、short、ushort、int、uint、long 或 ulong 类型作为对应的基础类型。没有显式地声明基础类型的枚举声明意味着所对应的基础类型是 int。 
(2)枚举成员 
枚举成员是该枚举类型的命名常数。任意两个枚举成员不能具有相同的名称。每个枚举成员均具有相关联的常数值。此值的类型就是枚举的基础类型。每个枚举成员的常数值必须在该枚举的基础类型的范围之内。 
示例: 
public enum TimeofDay:uint 

Morning=-3, 
Afternoon=-2, 
Evening=-1 

产生编译时错误,原因是常数值 -1、-2 和 –3 不在基础整型 uint 的范围内。 
(3)枚举成员默认值 
在枚举类型中声明的第一个枚举成员它的默值为零。 
以后的枚举成员值是将前一个枚举成员(按照文本顺序)的值加 1 得到的。这样增加后的值必须在该基础类型可表示的值的范围内;否则,会出现编译时错误。 
示例: 
public enum TimeofDay:uint 

Morning, 
Afternoon, 
Evening 

Morning的值为0,Afternoon的值为1,Evening的值为2。 
(4)为枚举成员显示赋值 
允许多个枚举成员有相同的值. 
没有显示赋值的枚举成员的值,总是前一个枚举成员的值+1. 
示例 
public enum Number 

a=1, 
b, 
c=1, 


b的值为2,d的值为2. 
注意:以上枚举值都不能超过它的基础类型范围。否则会报错. 
(5)枚举类型与基础类型的转换 
基础类型不能隐式转换为枚举类型 
枚举类型也不能隐式转换为基础类型 
示例: 
public enum Number 

a, 
b, 
c, 

class Test 

public static void Main() 

int i=Number.a;//错误,要强制类型转换(int)Number.a 
Number n; 
n=2 //错误,要强制类型转换(Number)2 


(6)System.Enum类型 
System.Enum 类型是所有枚举类型的抽象基类,并且从 System.Enum 继承的成员在任何枚举类型中都可用。 
System.Enum 本身不是枚举类型。相反,它是一个类类型,所有枚举类型都是从它派生的。 
System.Enum 从类型 System.ValueType派生 
(7)使用枚举类型 
using System; 
public enum TimeofDay 

Morning, 
Afternoon, 
Evening 

class Test 

static void WriteGreeting(TimeofDay timeofDay) 

switch(timeofDay) 

case TimeofDay.Morning: 
Console.WriteLine("good morning"); 
break; 
case TimeofDay.Afternoon: 
Console.WriteLine("good afternoon"); 
break; 
case TimeofDay.Evening: 
Console.WriteLine("good evening"); 
break; 


static void Main() 

WriteGreeting(TimeofDay.Morning); 
WriteGreeting(TimeofDay.Evening); 
WriteGreeting(TimeofDay.Afternoon); 

}
枚举的目的:比如说你现在声明一个变量
string week ;要给它赋值,很明显它的值应该是从星期一到星期日,也就是说你只能给它赋这七个中的一个才有意义。
为了防止用户录入了错误的信息,设置了枚举变量,规定只能选择此变量中的一个值。
其实这符合微软的一个通常的做法:能不让用户自己录入信息的一般都给出了一大堆的范围,让我们自己选择。
枚举主要用于某些有特定意义的东西,比如具体的方向,星期等特定的内容,让用户只能选择使用这里面的特定的值

也有用於限定用戶輸入的目的,對防錯有一定的作用

posted on 2008-03-12 18:21  yunshu  阅读(3442)  评论()    收藏  举报