枚举类型的一点研究
2005-02-13 00:36
218 查看
由于我本人是直接从Java开始学习.Net的(using System;
class TestApp
public static void Main(string[] args)
Weekdays Today = Weekdays.Wendsday;
Console.WriteLine("Today is " + Today);
Weekends weekend;
weekend = Weekends.Saturday;
Console.WriteLine("First day on weekend is " + weekend);
DaysOfMonth days = DaysOfMonth.Jan;
Console.WriteLine("Days in Month is " + (int)days);
}
}
ok,csc编译运行一下,看看结果:
Today is Wendsday
First day on weekend is Saturday
Days in Month is 31
看起来没什么问题啊,好,现在把上面的代码改动一处,把最后一句 Console.WriteLine("Days in Month is " + (int)days);改成 Console.WriteLine("Days in Month is " + days);重新编译运行一下,再看看结果:
Today is Wendsday
First day on weekend is Saturday
Days in Month is Jul
奇怪了,明明days是“Jan”,为什么显示出来的是“Jul”呢?请再把代码中的“DaysOfMonth”枚举变量改成如下的定义:enum DaysOfMonth {Jan = 131, Feb = 228, Mar = 331, Apr = 430, May = 531, Jun = 630, Jul = 731, Aug = 831, Sep = 930, Oct = 1031, Nov = 1130, Dec = 1231 },重新编译再运行一下,看看结果:
Today is Wendsday
First day on weekend is Saturday
Days in Month is Jan
这次没问题了,“days”可以正确显示了。这说明了,如果对enum变量进行定义的时候,给每个枚举常量赋了整型值,如果整型值有重复的,而你又最终不是通过转型取整型值而是直接去取枚举变量本身,则可能取不到你想要的值。我猜测取值的算法是随机的,开始我作简单测试的时候,以为还是有规律的,一度以为是以当前要取值的枚举常量后第一个匹配的常量,后来发现是错误的。不知道我猜的对不对,欢迎大家指教!
class TestApp
public static void Main(string[] args)
Weekdays Today = Weekdays.Wendsday;
Console.WriteLine("Today is " + Today);
Weekends weekend;
weekend = Weekends.Saturday;
Console.WriteLine("First day on weekend is " + weekend);
DaysOfMonth days = DaysOfMonth.Jan;
Console.WriteLine("Days in Month is " + (int)days);
}
}
ok,csc编译运行一下,看看结果:
Today is Wendsday
First day on weekend is Saturday
Days in Month is 31
看起来没什么问题啊,好,现在把上面的代码改动一处,把最后一句 Console.WriteLine("Days in Month is " + (int)days);改成 Console.WriteLine("Days in Month is " + days);重新编译运行一下,再看看结果:
Today is Wendsday
First day on weekend is Saturday
Days in Month is Jul
奇怪了,明明days是“Jan”,为什么显示出来的是“Jul”呢?请再把代码中的“DaysOfMonth”枚举变量改成如下的定义:enum DaysOfMonth {Jan = 131, Feb = 228, Mar = 331, Apr = 430, May = 531, Jun = 630, Jul = 731, Aug = 831, Sep = 930, Oct = 1031, Nov = 1130, Dec = 1231 },重新编译再运行一下,看看结果:
Today is Wendsday
First day on weekend is Saturday
Days in Month is Jan
这次没问题了,“days”可以正确显示了。这说明了,如果对enum变量进行定义的时候,给每个枚举常量赋了整型值,如果整型值有重复的,而你又最终不是通过转型取整型值而是直接去取枚举变量本身,则可能取不到你想要的值。我猜测取值的算法是随机的,开始我作简单测试的时候,以为还是有规律的,一度以为是以当前要取值的枚举常量后第一个匹配的常量,后来发现是错误的。不知道我猜的对不对,欢迎大家指教!
相关文章推荐
- 关于C#中readonly的一点小研究
- 创建X509证书,并获取证书密钥的一点研究
- 局域网传输文件的一点研究
- oracle控制文件的一点研究
- Amf3+socket开发网络游戏或应用的一点研究心得
- 卷积地图的一点研究
- 关于扩展欧几里得的一点研究
- 关于以太网PAUSE的一点研究
- iOS 剪切板-(看了一点待研究)
- 个人对kobject的一点研究
- LINUX下CPU Load Average的一点研究
- qWikiOffice研究一点心得
- 关于博客在教学中的应用课题研究的一点小资料(2)。。
- 继承和多态的一点小小研究
- 有关花指令的一点小研究(二)
- 研究kooxoo中的一点担心
- 个人对kobject的一点研究
- 对 jQuery SimpleTree的拖拽机制代码的一点研究
- 960 grid system的一点研究
- (转)创建X509证书,并获取证书密钥的一点研究