关于c# 枚举问题

freeworrier 2008-10-27 08:08:46
class Program
{
static void Main(string[] args)
{
A a = 0; //正确
Console.WriteLine(a);
A b = 1; //错误
Console.WriteLine(b);
}
}
public enum A
{
A,B,C
}

谁帮我解释解释?
为什么只有赋值0 不用强制转换? 还有

public enum A
{
A=1,B,C
}

枚举是这样的时候 A a=0; 也不报错,但是 console.writeline(a); 的结果是0 应该报错啊 哪位高手大哥给解释下啊
...全文
68 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wartim 2008-10-28
  • 打赏
  • 举报
回复
http://geekswithblogs.net/chrishan/archive/2006/07/24/86123.aspx
看老外的说法
lz说是bug
C# bug: you are able to pass in 0 which is out of the scope of enuPath
他意思是enuPath里没有枚举值是0的值,但是传参enuPath EnuPath却传入了0,而且编译和运行通过了这里然后进入了判断逻辑
有一个家伙不同意
0 is the default/initial value, and is not subject to the typecast requirement.
他说0是缺省值,而且不需要显示地类型转换
whitechololate 2008-10-28
  • 打赏
  • 举报
回复
sorry! 看错了

重新赋值应该为:
A.A = 1;
A.B = 2;......
应用时,
int X = A.B; //得到 X = 2

枚举在定义时赋值
应用时
int X = Convert.ToInt32(A.B);//得到 X = 2
whitechololate 2008-10-28
  • 打赏
  • 举报
回复
枚举类型的应用主要是防止手动输入错误值。
定义时 给
枚举元素的默认基础类型为int 默认情况下,第一个枚举元素的值为0,后面每个枚举元素的值依次递增1 。如
emum weekday{sun,mon,tue,wed,thu,fri,sat},在此枚举中,sun的值为0 ,mon为1 以此类推。也可emum weekday{sun=1,mon,tue,wed=sun,thu,fri,sat},强制第一个枚举元素sun的值为1,mon为2,tue为3,而wed又强制为1,依次类推。
在调用时改变其值

A a = 0; //正确
Console.WriteLine(a);
A b = 1; //错误
Console.WriteLine(b);

重新赋值应该为:
A.A = 1;
A.B = 2;......
应用时,
int X = A.B; //得到 X = 2

billlyh 2008-10-28
  • 打赏
  • 举报
回复
0程序也可能误认为是字母O,也可认为是数字0,

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧