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

推荐订阅源

博客园_首页
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
G
Google Developers Blog
B
Blog
Engineering at Meta
Engineering at Meta
阮一峰的网络日志
阮一峰的网络日志
The Register - Security
The Register - Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
The Cloudflare Blog
The Hacker News
The Hacker News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
雷峰网
雷峰网
F
Fortinet All Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
A
About on SuperTechFans
量子位
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
H
Help Net Security
Help Net Security
Help Net Security
P
Palo Alto Networks Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Troy Hunt's Blog
W
WeLiveSecurity
V
Vulnerabilities – Threatpost
T
The Exploit Database - CXSecurity.com
Know Your Adversary
Know Your Adversary
Apple Machine Learning Research
Apple Machine Learning Research
Scott Helme
Scott Helme
N
News | PayPal Newsroom
AWS News Blog
AWS News Blog
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
腾讯CDC
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog
TaoSecurity Blog
TaoSecurity Blog
GbyAI
GbyAI
Y
Y Combinator Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
D
Docker

博客园 - zoop89850

maven 打包 时出现非法字符: /65279错误 JAVA学习笔记 第一篇 开发环境 传输文件过程中遇到异常被中断 项目所需的应用程序未安装,确保已安装项目类型(.csproj)的应用程序的解决办法[转] 窗体的置顶显示 WPF Image控件中的ImageSource与Bitmap的互相转换 WPF加载相对路径的图片的解决方法 2011/08/27 刷机器,遭遇白苹果,不可连接ipod服务器 的解决 将截图图片放入内存(剪贴板)中 C# 获取屏幕的大小 C# WinForm急速系列 – DataGridView 附Word文档 转载:MicrosoftHelp文件夹中后缀名为.hxw .hxm之类的文件是MSDN帮助文档的索引,不要轻易删除 利用case或者decode实现自定义顺序排序 一种简单的根据备份文件 恢复数据库的方法 计算sql语句的执行时间 Java,JavaScript,JScript 区别 HTML代码简单教程 文件夹无法打开怎么办? - zoop89850 - 博客园 sqlserver提示“在流水模式下,事务无法启动”的解决办法
【摘】枚举类型
zoop89850 · 2008-01-15 · via 博客园 - zoop89850

今天比较几个项目的身份验证时看到了某个页面出现了enum枚举,但是没有具体的使用,找了几本书,发现下面这本说得很好很简单,尤其将枚举和位域的区分,很明确。便摘了出来,以供参考。

摘自:精通.Net核心技术原理与构架

Enum 枚举类型,属于值类型。

   枚举(enum)是值类型的一种特殊形式,它从System.Enum继承而来,并为基础的值提供替代名称。枚举类型有名称、基础类型和一组字段。基础类型必须是一个内置的有符号(或无符号)整数类型(如Byte,Int32,或Uint64)。字段是静态文本字段,其中的每一个字段都表示常数。同一个值可以分配给多个字段。出现这种情况时,必须将其中的某个值标记为主要枚举值,以便进行反射和字符串转换。可以将基础类型的值分配给枚举,反之亦然(运行库不要求强制转换)。可创建枚举类型的实例,并调用System.Enum的方法以及对枚举的基础类型定义的任何方法。但是某些语言可能不允许在要求基础类型的实例时作为参数传递枚举(反之亦然)。对于枚举还有以下的限制:

1.    它们不能定义自己的方法

2.    它们不能实现接口

3.    它们不能定义属性和事件

Flags 属性表示一种特殊的枚举。称为位域。运行库本身不区分传统枚举与位域,但是某些.NET编程语言可能区分二者。当区分二者的时候,可以对位域(而不是枚举)使用位操作符以产生未命名的值。枚举一般用于列出唯一的元素,如一周的各天,国家或地区名称等。位域一般用于列出可能联合发生的质量和数量,比如Red and Big and Fast。

以下代码示例说明如何使用位域和传统枚举。

[Visual Basic]

【省略】

[C#]

using System;

using System.collections;

//传统的枚举类型

Public enum SomeRootVegetables

{

    HorseRadish,

    Radish,

    Tumip

}

//位域枚举类型

[Flags]

Public enum Seasons

{

    None = 0,

    Summer = 1,

    Autumn = 2,

    Winter = 4,

    Spring = 8,

    All = Summer | Autumn | Winter | Spring

}

//用于测试的类

     public class EnumerationSample

        {

            public static void Main()

            {

                     //生成哈希表

                Hashtable AvailableIn = new Hashtable();

                AvailableIn[SomeRootVegetables.HorseRadish] = Seasons.All;

                AvailableIn[SomeRootVegetables.Radish] = Seasons.Spring;

                AvailableIn[SomeRootVegetables.Tumip] = Seasons.Spring | Seasons.Autumn;

                     //季节数组

                Seasons[] seasons = new Seasons(){Seasons.Winter,Seasons.Spring,

                                                  Seasons.Summer,Seasons.Autumn};

                    //显示每个季节可以食用的蔬菜

                for(int i = 0;i < seasons.Length;i++)

                {

                    Console.WriteLine(""r"n 下面的蔬菜的食用季节为" + seasons[i].ToString() + ";");

                    foreach(DictionaryEntry e in AvailableIn)

                    {

                                //位比较

                        if(( Seasons )e.Value & seasons[i]) > 0)

                        {

                            Console.WriteLine(""t" + ((SomeRootVegetables)e.Key).ToString());

                        }

                    }

                }

            }

        }

  }

执行结果如下图所示。

从执行结果可以看出,枚举类型的ToString()方法,自动将值转化为表示该值的字符串。

下面的蔬菜的食用季节为Winter

    HorseRadish

下面的蔬菜的食用季节为Spring

Turnip

Radish

HorseRadish

下面的蔬菜的食用季节为Summer

HorseRadish

下面的蔬菜的食用季节为Autumn

Turnip

HorseRadish

【over】   2007-01-15