由于我本人是直接从Java开始学习.Net的(枚举类型的一点研究,没办法,项目需要,自学成才),到现在还是有些基础知识不是很牢靠,所以就萌发了写一系列的有关.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变量进行定义的时候,给每个枚举常量赋了整型值,如果整型值有重复的,而你又最终不是通过转型取整型值而是直接去取枚举变量本身,则可能取不到你想要的值。我猜测取值的算法是随机的,开始我作简单测试的时候,以为还是有规律的,一度以为是以当前要取值的枚举常量后第一个匹配的常量,后来发现是错误的。不知道我猜的对不对,欢迎大家指教!


相关文章:

  • 2021-07-05
  • 2022-12-23
  • 2022-01-11
  • 2021-09-27
猜你喜欢
  • 2021-11-03
相关资源
相似解决方案