C#枚举和铸造

use*_*603 7 c# enums

如果在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;
                }
Run Code Online (Sandbox Code Playgroud)

Jar*_*Par 15

somevalue的类型是什么?如果类型是MyEnum,则铸造是不必要的,并且应该没有错误.

如果类型是int然后是,则必须转换为MyEnum才能正确切换/大小写.但是你可以通过转换值而不是每个case语句来使这更简单一些.例如

switch( (MyEnum)somevalue )  {
  case MyEnum.Value1: ...
}
Run Code Online (Sandbox Code Playgroud)

  • @Walden,这与这个问题无关.问题是"为什么不编译".无论值是什么,将int转换为从int派生的枚举都将成功. (2认同)

Mit*_*eat 2

如果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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)