using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace EnumTest1
{
    enum Days 
    {
        Monday,
        Tuesday,
        Wednesday
    }
    class Program
    {
        static void Main(string[] args)
        {
            EnumClass a = new EnumClass();            //只声明,未赋值,输出:Monday
            Console.WriteLine(a.em.ToString());
            //将a.em显式类型转换,输出:0
            Console.WriteLine(((Int32)a.em).ToString());            //显式赋值0,输出:Monday
            a.em = 0;
            Console.WriteLine(a.em.ToString());            //下面这条语句会报错:Cannot implicitly convert type 'int' to 'EnumTest1.Days'
            //a.em = 1;            //显示转换类型后就行了,就像下面,输出:Wednesday
            a.em = (Days)2;
            Console.WriteLine(a.em.ToString());            //下面这条语句输出:5
            a.em = (Days)5;
            Console.WriteLine(a.em.ToString());
            
            Console.ReadKey();
        }
    }    class EnumClass 
    {
        public Days em { get; set; }
    }
}
今天偶然发现enum类型还真不一般,上面这些现象,还请高手讲一讲。

解决方案 »

  1.   

    定义枚举的时候就定义为int 型看看.以前貌似也遇到的说.
      

  2.   


    enum Days:int这样?貌似结果没有任何变化,a.em = 1同样报错
      

  3.   

    enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型。每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型。枚举元素的默认基础类型为 int。默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。
    Enum.GetName(
    Type enumType,
    Object value
    )
      

  4.   

    不同类型的数据当然不能随便转换啦,这有什么奇怪呢?
    // 隐式声明
    enum Days
    {
    Monday,
    Tuesday,
    Wednesday,
    Sunday
    }// 显示声明
    enum Days
    {
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Sunday = 7
    }// 隐式声明中 Sunday 的值对应的是 4
    // 利用 Enum.IsDefined 方法可以判断某个值在枚举中是否被定义// 完整的例子
    enum Days
    {
    Unknow = 0,
    Monday,
    Tuesday,
    Wednesday,
    Friday = 5,
    Sunday = 7
    }private void button1_Click(object sender, RoutedEventArgs e)
    {
    Days d = Days.Monday; for (int i = 0; i < 8; i++)
    {
    if (Enum.IsDefined(d.GetType(), i))
    {
    Console.WriteLine(Enum.GetName(d.GetType(), i));
    }
    else Console.WriteLine("{0}, undefined!", i);
    }
    }/* 输出
    Unknow
    Monday
    Tuesday
    Wednesday
    4, undefined!
    Friday
    6, undefined!
    Sunday
    */
      

  5.   


    我看了看IL代码,因为在下水平比较低,看得不是很明白,发现在(Days)2这种地方貌似发生了装箱操作。现在就更迷糊了,在枚举值类型里形如Wednesday=1,那个Wednesday是一个占位符?或者可以看成一种映射?还请前辈们指教