C#显式枚举转换问题
usingSystem;enumColor{Red,Green=10,Blue}classTest{publicstaticvoidMain(){Console.Writ...
using System;
enum Color
{
Red,
Green=10,
Blue
}
class Test
{
public static void Main()
{
Console.WriteLine(StringFromColor(Color .Red));
Console.WriteLine(StringFromColor(Color .Green));
Console.WriteLine(StringFromColor(Color .Blue));
}
static string StringFromColor(Color c)
{
switch (c)
{
case Color .Red :
return string.Format("Red={0}",(int)c);
case Color .Green :
return string.Format("Green={0}",(int)c);
case Color .Blue :
return string.Format("Blue={0}",(int)c);
default :
return "No Color";
}
}
}
我不明白为什么blue输出的结果是11,red输出的结果是0,请高手指教,谢谢! 展开
enum Color
{
Red,
Green=10,
Blue
}
class Test
{
public static void Main()
{
Console.WriteLine(StringFromColor(Color .Red));
Console.WriteLine(StringFromColor(Color .Green));
Console.WriteLine(StringFromColor(Color .Blue));
}
static string StringFromColor(Color c)
{
switch (c)
{
case Color .Red :
return string.Format("Red={0}",(int)c);
case Color .Green :
return string.Format("Green={0}",(int)c);
case Color .Blue :
return string.Format("Blue={0}",(int)c);
default :
return "No Color";
}
}
}
我不明白为什么blue输出的结果是11,red输出的结果是0,请高手指教,谢谢! 展开
4个回答
展开全部
因为你给Green赋了初值,在Green后定义的数值为Green的值+1,如
enum Color
{
Red,
Green=10,
Blue,
Yellow,
Black =20,
White
}
Yellow就为12,White为21,下面是MSDN里的enum的定义
enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常数组成的独特类型。每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型。枚举元素的默认基础类型为 int。默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。例如:
enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
在此枚举中,Sat 为 0,Sun 为 1,Mon 为 2,依此类推。枚举数可以具有重写默认值的初始值设定项。例如:
enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
在此枚举中,强制元素序列从 1 而不是 0 开始。
可以给 Days 类型的变量赋以基础类型范围内的任何值,所赋的值不限于已命名的常数。
enum E 的默认值为表达式 (E)0 产生的值。
注意
枚举数的名称中不能包含空白。
基础类型指定为每个枚举数分配的存储大小。但是,从 enum 类型到整型的转换需要用显式类型转换来完成。例如,下面的语句通过使用强制转换从 enum 转换为 int,将枚举数 Sun 赋给 int 类型的变量:
int x = (int)Days.Sun;
enum Color
{
Red,
Green=10,
Blue,
Yellow,
Black =20,
White
}
Yellow就为12,White为21,下面是MSDN里的enum的定义
enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常数组成的独特类型。每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型。枚举元素的默认基础类型为 int。默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。例如:
enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
在此枚举中,Sat 为 0,Sun 为 1,Mon 为 2,依此类推。枚举数可以具有重写默认值的初始值设定项。例如:
enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
在此枚举中,强制元素序列从 1 而不是 0 开始。
可以给 Days 类型的变量赋以基础类型范围内的任何值,所赋的值不限于已命名的常数。
enum E 的默认值为表达式 (E)0 产生的值。
注意
枚举数的名称中不能包含空白。
基础类型指定为每个枚举数分配的存储大小。但是,从 enum 类型到整型的转换需要用显式类型转换来完成。例如,下面的语句通过使用强制转换从 enum 转换为 int,将枚举数 Sun 赋给 int 类型的变量:
int x = (int)Days.Sun;
展开全部
枚举数的具体数值,是根据上一个枚举数确定的。
Green 被手工指定为 10(若不指定,默认为 1),那么 Blue 的值则为 Green + 1 即为 11(若 Green 没有指定,则 Blue 为 2)
Red 没有指定值,默认为零(枚举体中,第一个枚举数默认值是零)
Green 被手工指定为 10(若不指定,默认为 1),那么 Blue 的值则为 Green + 1 即为 11(若 Green 没有指定,则 Blue 为 2)
Red 没有指定值,默认为零(枚举体中,第一个枚举数默认值是零)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int 枚举已零为开始,即 red 0,后面如不赋值那green应为1,blue为2
而后指定green =10,此时已从10开始递增
blue就为11了
(每次+1)
而后指定green =10,此时已从10开始递增
blue就为11了
(每次+1)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
枚举的输出是从0开始的依次往下,但如果有赋值的话就应该从所赋值的值依次往下。例如
星期一,星期二=20,星期三,星期四=0,星期五
则输出的结果是星期一为0,星期二为20,星期三为21,星期四为0,星期五为1。
这样说能明白吧。
星期一,星期二=20,星期三,星期四=0,星期五
则输出的结果是星期一为0,星期二为20,星期三为21,星期四为0,星期五为1。
这样说能明白吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询