日期:2014-05-17  浏览次数:20851 次

关于枚举类型的问题
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这两种形式的对吗?

------解决方案--------------------
C#是一种强类型语言~类型必须一致
想javascript这种弱类型语言~我声明函数需要3个参数,你传2给我给也行~
我说第一个是字符串,你传整形给我也行~ 当然运行的时候出错再说~

weekday myweek=weekday.sunday;
byte value=(byte)myweek;
声明了不同类型,所以需要转化~ 除非是父子关系
但weekday:byte 这语法不是继承~ 所以他们不是父子~

是枚举的特点,就是声明一个值的取值范围,你只能在这个范围中挑选一个~
------解决方案--------------------
weekday虽然以byte为基础类型,但和byte是两个类型,必须转换
------解决方案--------------------
本身weekday是作为byte类型被声明的,为什么还要以byte value=(byte)myweek来强制转换呢?
因为enum weekday:byte并不是继承语法。这个语法只是表明这个枚举类型背后用来存储值的类型是byte。所以上述情况还是需要强制转换一下的。
------解决方案--------------------
http://msdn.microsoft.com/zh-cn/library/vstudio/sbbt4032.aspx

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