C# 默认枚举类型,为什么此代码不编译?
我定义了一个枚举。我还有两种方法:C# 默认枚举类型,为什么此代码不编译?,c#,enums,C#,Enums,我定义了一个枚举。我还有两种方法: 方法1-将获取枚举类型-枚举默认类型为int,因此它将打印System.Int32 方法2-将有一个开关案例,将枚举类型与简单数字进行比较-因此,如果枚举为int,则需要编译开关案例,而不会出现问题,也不会进行任何强制转换 但是这段代码没有编译,我得到了两个错误(在switch案例中案例1和案例2的错误点) 无法将类型“int”隐式转换为“Color”。存在显式转换(是否缺少强制转换?) 即使Color类型为int,也有人可以解释我为什么会出错 要编译这段代码
System.Int32
Color
类型为int
,也有人可以解释我为什么会出错
要编译这段代码,我需要将颜色转换为int
守则:
public enum Color
{
RED, // 0
BLUE, // 1
GREEN // 2
};
Color color = Color.BLUE;
private void boo(object sender, EventArgs e)
{
string str = Enum.GetUnderlyingType( color.GetType() ).ToString();
// it will print 'System.Int32'
System.Console.WriteLine(str);
}
// the switch case make the compile error - but the color is int
private void foo()
{
switch( color )
{
case 0:
{
}
break;
case 1:
{
}
break;
case 2:
{
}
break;
}
}
您可以直接检查枚举类型
试试这个:
private void foo()
{
switch( color )
{
case Color.RED:
{
}
break;
case Color.GREEN:
{
}
break;
case Color.BLUE:
{
}
break;
}
}
您可以直接检查枚举类型
试试这个:
private void foo()
{
switch( color )
{
case Color.RED:
{
}
break;
case Color.GREEN:
{
}
break;
case Color.BLUE:
{
}
break;
}
}
您的代码需要是:
switch( color )
{
case Color.RED:
break;
...
}
或
您的代码需要是:
switch( color )
{
case Color.RED:
break;
...
}
或
您的箱子不需要大括号。颜色不是int
。它是Color
,底层类型为int
。为什么你认为枚举和int完全一样?switch((int)color)如果你不喜欢在switch中使用枚举值,为什么不使用case RED:etc???@Kevin,这显然是一个存根。有些人喜欢经常使用大括号,这样他们就不必担心变量声明的冲突。大小写块不需要大括号。颜色不是int
。它是Color
,底层类型为int
。为什么你认为枚举和int完全一样?switch((int)color)如果你不喜欢在switch中使用枚举值,为什么不使用case RED:etc???@Kevin,这显然是一个存根。有些人喜欢经常使用大括号,这样他们就不必担心变量声明的冲突。是不是RED
枚举类型的某个常量Color
?应该是case Color。RED:
是的,愚蠢的错误。谢谢你指出这一点。问题是为什么我需要做的案件,如果类型已经int@Yanshof枚举不是int
,如果您指定,它只是基于int甚至字节。是RED
枚举类型的某个常量Color
?应该是大小写颜色。RED:
是的,愚蠢的错误。谢谢你指出这一点。问题是为什么我需要做的案件,如果类型已经int@Yanshof枚举不是int
,它只是基于int或甚至字节(如果您指定的话)。