C# 默认枚举类型,为什么此代码不编译?

C# 默认枚举类型,为什么此代码不编译?,c#,enums,C#,Enums,我定义了一个枚举。我还有两种方法: 方法1-将获取枚举类型-枚举默认类型为int,因此它将打印System.Int32 方法2-将有一个开关案例,将枚举类型与简单数字进行比较-因此,如果枚举为int,则需要编译开关案例,而不会出现问题,也不会进行任何强制转换 但是这段代码没有编译,我得到了两个错误(在switch案例中案例1和案例2的错误点) 无法将类型“int”隐式转换为“Color”。存在显式转换(是否缺少强制转换?) 即使Color类型为int,也有人可以解释我为什么会出错 要编译这段代码

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

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

  • 方法2-将有一个开关案例,将枚举类型与简单数字进行比较-因此,如果枚举为int,则需要编译开关案例,而不会出现问题,也不会进行任何强制转换

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

    无法将类型“int”隐式转换为“Color”。存在显式转换(是否缺少强制转换?)

    即使
    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或甚至字节(如果您指定的话)。