黑马程序员技术交流社区

标题: 枚举类型的取值范围 [打印本页]

作者: 黑骏马    时间: 2013-8-1 01:40
标题: 枚举类型的取值范围
  1.     class Program
  2.     {
  3.         enum Gender { 男,女 }
  4.         static void Main(string[] args)
  5.         {
  6.             Gender sex;
  7.             Console.WriteLine("请输入你的性别(男/女):");
  8.             string s = Console.ReadLine();
  9.             try
  10.             {
  11.                 sex = (Gender)(Enum.Parse(typeof(Gender), s));
  12.                 Console.WriteLine("性别是"+sex);
  13.             }
  14.             catch
  15.             {
  16.                 Console.WriteLine("输入有误。");
  17.             }
  18.             Console.ReadKey();
  19.         }
  20.     }
复制代码
枚举类型Gender的值应该只有男和女才对,但输入数字(包括0和1以外的)程序也会正常运行,输出输入的数字。
枚举类型的值不受定义时写好的值的数量限制吗?(上例中只定义了男女两个值,对应的int值是0和1,但是2以后的int值也可以赋给Gender型变量sex。。。)
.
作者: 许庭洲    时间: 2013-8-1 06:33
1. 按照系统的默认,枚举中的每个元素类型都是int型,且第一个元素删除的值为0,它后面的每一个连续的元素的值按加1递增。
2. 在枚举中,也可以给元素直接赋值,如下把性别中的男的值设为0,其后的元素的值分别为1。
    enum Gender { 男=0,女 }
作者: lvjayj    时间: 2013-8-1 21:31
枚举的本质就是int,只不过限定了一个范围。
输其他值时,强制转换为int,而不会检查其是否超出范围。
一个不是Gender类型的值,被强制转换为Gender类型,没有实际意义。
作者: 彭家贰小姐    时间: 2013-8-1 22:22
是有这样的情况

所以建议在转之前,可以先用Enum.IsDefined(typeof(Gender), n))这个方法判断:某个整型是否定义在枚举中






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2