[英]C# Enums and casting
如果在 C# 中声明枚举,则默认类型自动为 int。
那么,为什么在使用枚举时的 case 语句或其他情况下,您必须显式重铸才能使用这些值? 如果您必须明确区分大小写,或者我只是在这里做错了什么,那么拥有基础类型有什么意义?
private enum MyEnum
{
Value1,
Value2,
Value3
}
switch (somevalue)
{
case (int)MyEnum.Value1:
someothervar = "ss";
break;
case (int)MyEnum.Value2:
someothervar = "yy";
break;
case (int)MyEnum.Value3:
someothervar = "gg";
break;
}
somevalue 的类型是什么? 如果类型是 MyEnum,则不需要强制转换,并且应该可以正常工作。
如果类型是 int 那么是的,您必须转换为 MyEnum 才能正确切换 / 大小写。 但是您可以通过强制转换值而不是每个 case 语句来简化这一点。 例如
switch( (MyEnum)somevalue ) {
case MyEnum.Value1: ...
}
显然 somevalue 是 integer 而不是明确键入为您的枚举。 您应该记住,枚举的基础值只是“存储类型” ,并且不能隐式互换。 但是,您可以轻松地使用 cast 运算符使您的代码简单且“更多”类型安全:
private enum MyEnum { Value1, Value2, Value3 }
switch ((MyEnum)somevalue)
{
case MyEnum.Value1:
someothervar = "ss";
break;
case MyEnum.Value2:
someothervar = "yy";
break;
case MyEnum.Value3:
someothervar = "gg";
break;
default:
throw new NotSupportedException();
}
最终,您会想要一个不必从 integer 转换为枚举的设计,但在从磁盘或数据库读取时,通常情况并非如此。
如果somevalue
是MyEnum
类型,则不必强制转换为int
。
public enum Color
{
Red,
Blue,
Green
}
class Program
{
static void Main(string[] args)
{
Color color = Color.Red;
switch (color)
{
case Color.Red:
break;
case Color.Blue:
break;
case Color.Green:
break;
}
}
}
正如其他人所说:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.