enum weekday:byte

  monday=1,
  tuesday=2,
  wednesday=3,
  thursday=4,
  friday=5,
  satuday=6,
  sunday=7
}
static void Main(string[] args)
{
  weekday myweek=weekday.sunday;
  byte value=(byte)myweek;
  Console.WriteLine("myweek={0}",myweek);
  Console.WriteLine("value={0}",value);
}
在以上代码中,weekday myweek=weekday.sunday表明已把weekday的sunday成员赋值给了myweek,且本身weekday是作为byte类型被声明的,为什么还要以byte value=(byte)myweek来强制转换呢?我运行后的结果是
myweek=sunday
value=7
有点似懂非懂的感觉。
请高手解释下为什么weekday myweek=weekday.sunday的结果是将sunday赋值给myweek,是枚举类型的特点,还是这代码的书写问题?还有,枚举类型的赋值方式就只有weekday myweek=weekday.sunday和byte value=(byte)mywee这两种形式的对吗?

解决方案 »

  1.   

    C#是一种强类型语言~类型必须一致
    想javascript这种弱类型语言~我声明函数需要3个参数,你传2给我给也行~
    我说第一个是字符串,你传整形给我也行~ 当然运行的时候出错再说~weekday myweek=weekday.sunday;
    byte value=(byte)myweek;
    声明了不同类型,所以需要转化~ 除非是父子关系
    但weekday:byte 这语法不是继承~ 所以他们不是父子~是枚举的特点,就是声明一个值的取值范围,你只能在这个范围中挑选一个~
      

  2.   

    weekday虽然以byte为基础类型,但和byte是两个类型,必须转换
      

  3.   

    本身weekday是作为byte类型被声明的,为什么还要以byte value=(byte)myweek来强制转换呢?
    因为enum weekday:byte并不是继承语法。这个语法只是表明这个枚举类型背后用来存储值的类型是byte。所以上述情况还是需要强制转换一下的。
      

  4.   

    http://msdn.microsoft.com/zh-cn/library/vstudio/sbbt4032.aspx你可以看到这样的描述:在下面例中,使用了基类选项来声明 long 类型的 enum 成员。  请注意,即使枚举的基础类型是 long,也仍然必须使用强制转换将枚举成员显式转换为 long 类型。