默认枚举类型,为什么这段代码不能编译?

时间:2013-11-19 15:32:04

标签: c# enums

我定义了一个枚举。我也有两种方法:

  1. 方法1 - 将获取枚举类型 - 枚举默认类型为int,因此它将打印System.Int32

  2. 方法2 - 将具有将枚举类型与简单数字进行比较的switch case - 因此,如果enum是int,则switch需要编译而没有问题且没有任何强制转换。

  3. 但是这段代码没有编译,我得到两个错误(案例1上的错误点和案例2中的错误点)

      

    无法将类型'int'隐式转换为'Color'。存在显式转换(您是否错过了演员?)

    有人可以解释为什么即使Color类型为int我也会收到错误?

    要编译此代码,我需要将Color转换为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;
        }
    }
    

2 个答案:

答案 0 :(得分:3)

您的代码必须是:

switch( color )
{
    case Color.RED:
        break;
...
}

switch ( (int)color)
{
    case 0:
        break;
...
}

答案 1 :(得分:1)

您可以直接查看Enum Types

试试这个:

          private void foo()
           {
            switch( color )
            {
                case Color.RED:
                {

                }
                break;

                case Color.GREEN:
                {

                }
                break;

                case Color.BLUE:
                {

                }
                break;
            }
        }