(一)首先讲一个不熟悉的数据类型:byte

byte 关键字代表一种整型,该类型按下表所示存储值:

类型

范围

大小

.NET Framework 类型

byte

0 到 255

无符号 8 位整数

System.Byte

可如下例所示声明并初始化 byte 类型的变量:

byte myByte = ;

在以上声明中,整数(不是整型) 255 从 int 隐式转换为 byte。 如果整数超出了 byte 的范围,将产生编译错误。

存在从 byte 到 short、ushort、int、uint、long、ulong、float、double 或 decimal 的预定义隐式转换。

不能将更大存储大小的非文本数值类型隐式转换为 byte。但是,在目标变量具有相同或更大的存储大小时,使用下列语句是可能的。

byte x = , y = ;//将整型数值赋值byte类型变量

// Error: conversion from int to byte:
//以下赋值语句将产生一个编译错误,原因是赋值运算符右侧的算术表达式在默认情况下的计算结果为 int 类型。
byte z = x + y;
// OK: explicit conversion:
byte z = (byte)(x + y); //在目标变量具有相同或更大的存储大小时,使用下列语句是可能的:
int x = , y = ;
int m = x + y;
long n = x + y;

(二)枚举类型

enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型

每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型。 枚举元素的默认基础类型为 int。 要声明另一整型枚举(如 byte),请在标识符之后紧跟类型,然后再使用冒号,如下面的示例所示。

enum Days : byte {Sat=, Sun, Mon, Tue, Wed, Thu, Fri};

准许使用的枚举类型有 byte、sbyte、short、ushort、int、uint、long 或 ulong。

可以给 Days 类型的变量赋以基础类型范围内的任何值,所赋的值不限于已命名的常数。

Days是一个类型,它可以定义变量,并且给变量赋值。

基础类型指定为每个枚举数分配的存储大小。 但是,从 enum 类型到整型的转换需要用显式类型转换来完成。 例如,下面的语句使用强制转换(从 enum 转换为 int)将枚举数 Sun 赋值给一个 int 类型的变量。

int x = (int)Days.Sun;

将 System.FlagsAttribute 应用于某个枚举时,如果该枚举包含一些使用按位 OR 运算组合的元素,该特性在用于某些工具时会影响 enum 的行为。 当使用诸如 Console 类方法、表达式计算器这样的工具时,可以注意到这些变化。

public class EnumTest
{
enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat}; static void Main()
{
int x = (int)Days.Sun;
int y = (int)Days.Fri; Days day = (Days);
Days dd = (Days); Console.WriteLine("Sun = {0}", x);//输出Sun = 0
Console.WriteLine("Sun = {0}", Days.Sun);//输出 Sun = Sun
Console.WriteLine("Fri = {0}", y);//输出 Fri = 5
Console.WriteLine("day = {0}", day);//输出day = 100
Console.WriteLine("day = {0}", dd);//输出dd = Wed Console.ReadKey();
}
}

System.FlagsAttribute 应用于某个枚举代码:

// Add the attribute Flags or FlagsAttribute.
[Flags]
public enum CarOptions
{
// The flag for SunRoof is 0001.
SunRoof = 0x01,
// The flag for Spoiler is 0010.
Spoiler = 0x02,
// The flag for FogLights is 0100.
FogLights = 0x04,
// The flag for TintedWindows is 1000.
TintedWindows = 0x08,
} class FlagTest
{
static void Main()
{
// The bitwise OR of 0001 and 0100 is 0101.
CarOptions options = CarOptions.SunRoof | CarOptions.FogLights; // Because the Flags attribute is specified, Console.WriteLine displays
// the name of each enum element that corresponds to a flag that has
// the value 1 in variable options.
Console.WriteLine(options);
// The integer value of 0101 is 5.
Console.WriteLine((int)options);
}
}
/* Output:
SunRoof, FogLights
5
*/
如果您移除 Flags,则示例将显示以下值:

可以使用枚举类型定义位标志,从而使该枚举类型的实例可以存储枚举数列表中定义的值的任意组合。 (当然,某些组合在您的程序代码中可能没有意义或不允许使用。)

创建位标志枚举的方法是应用 System.FlagsAttribute 特性并适当定义一些值,以便可以对这些值执行 AND、OR、NOT 和 XOR 按位运算。 在位标志枚举中包含一个值为零(表示“未设置任何标志”)的命名常量。如果零值不表示“未设置任何标志”,则请不要为标志指定零值。

[Flags]
enum Days2
{
None = 0x0,
Sunday = 0x1,
Monday = 0x2,
Tuesday = 0x4,
Wednesday = 0x8,
Thursday = 0x10,
Friday = 0x20,
Saturday = 0x40
}
class MyClass
{
Days2 meetingDays = Days2.Tuesday | Days2.Thursday;
}

http://msdn.microsoft.com/zh-cn/library/cc138362.aspx

http://msdn.microsoft.com/zh-cn/library/system.flagsattribute.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

[非技术参考]C#枚举类型的更多相关文章

  1. Java魔法堂:枚举类型详解

    一.前言 Java的枚举类型相对C#来说具有更灵活可配置性,Java的枚举类型可以携带更多的信息. // C# enum MyColor{ RED = , BLUE = } Console.Write ...

  2. C#之枚举类型

    参考: http://www.cnblogs.com/an-wl/archive/2011/04/14/2015815.html 惯例先上MSDN: https://msdn.microsoft.co ...

  3. Delphi的枚举类型

    参考:http://blog.csdn.net/kissdeath/article/details/2060573 Delphi程序不仅可以用于数值处理,还更广泛的用于处理非数值的数据.例如:性别.月 ...

  4. iOS: 枚举类型 enum,NS_ENUM,NS_OPTIONS

    一般情况下,我们采用C风格的enum关键字可以定义枚举类型. enum{ UIViewAnimationTransitionNone, UIViewAnimationTransitionFlipFro ...

  5. C#中的枚举类型(enum type)

    ylbtech 原文 C#中的枚举类型(enum type) 概念 枚举类型(enum type)是具有一组命名常量的独特的值类型.在以下示例中: enum Color { Red, Green, B ...

  6. Python中模拟enum枚举类型的5种方法分享

    这篇文章主要介绍了Python中模拟enum枚举类型的5种方法分享,本文直接给出实现代码,需要的朋友可以参考下   以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码代码如下: # way1 ...

  7. C语言--enum,typedef enum 枚举类型详解

    原文:http://z515256164.blog.163.com/blog/static/32443029201192182854300/ 有改动 C语言详解 - 枚举类型 注:以下全部代码的执行环 ...

  8. 【转】java枚举类型enum的使用

    原文网址:http://blog.csdn.net/wgw335363240/article/details/6359614 java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到 ...

  9. java枚举类型enum的使用

    2015-10-24 java达人 Java 中 的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型.要了解枚举类型,建议大家先打开jdk 中的E ...

随机推荐

  1. 任务调度开源框架Quartz动态加入、改动和删除定时任务

    Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz框架包括了调度器监听.作业和触发器监听.你能够配置作业和触发器监听为全局监听或者是特定于 ...

  2. 获取oracle sql语句中绑定变量值的方法

    在诊断 sql的性能问题时,我们有时候须要获取其绑定变量的实际值,然后将此实际值带入到sql语句其中,用原来的sql构成select语句(带where条件),实际的运行一下,看一下选择性怎样. 本文就 ...

  3. LeetCode Day1

    Palindrome Linked List /** * LeetCode: Palindrome Linked List * Given a singly linked list, determin ...

  4. jquery知识点积累

    网上资源汇总学习: jquery的选择器是CSS1-3,xpath的结合物.JQuery提取了这二种查询语言最好的部分,创造出了最终的jquery表达式查询语言. xpath是一门在xml文档里查找信 ...

  5. Http权威指南笔记(二) Http状态码大全

    100~199—信息状态码 200~299—成功状态码 客户端发请求时,这些请求通常都是成功的. 300~399—重定向状态码 重定向状态码告知客户端使用代替位置来访问他们所感兴趣的资源. 400~4 ...

  6. SQL SERVER 数据类型详解(SQL Server 2008)

    数据类型类别 SQL Server 中的数据类型归纳为下列类别: 数字类型 1.精确数字 2.近似数字 3.日期和时间 字符串类型 4.非Unicode字符串 4.Unicode字符串 5.二进制字符 ...

  7. zoj1027 Human Gene Functions

    一道动态规划,两个串进行匹配,不同字母匹配的值不一样,也可以和空格匹配(空格不能与空格匹配),求最大的匹配值. 数据很弱,每个串都在100以内. 定义dp[i][j]为第一个串前i个数和第二个串前j个 ...

  8. C语言学习的经典书籍--转载

    推荐前言: 原文出处:http://book.douban.com/doulist/338101/ 和其他语言相比(例如C++),C语言是一门比较“小”的语言,可以在较短的时间内入门.但是由于C的很强 ...

  9. 关于css3的背景切割(background-clip)、背景原点(background-origin)的使用

    一.背景切割   background-clip :border-box | padding-box | content-box   作用:为将背景图片做适当的裁剪,以适应需要.   默认格式 bac ...

  10. 一分钟了解PHP

    PHP5编辑 PHP5在长时间的开发及多个预发布版本后,2004年7月13日,PHP5.0发布.该版本以Zend引擎Ⅱ为引擎,并且加入了新功能如PHP Data Objects(PDO).PHP5.0 ...