c#enum协方差不起作用

use*_*055 6 c# enums covariance

我需要使用枚举作为协变类型.假设我有这个代码:

public enum EnumColor
{
    Blue = 0,
    Red = 1,
}

public class Car : IColoredObject<EnumColor>
{
    private EnumColor m_Color;
    public EnumColor Color
    {
        get
        {
            return m_Color;
        }
        set
        {
            m_Color = value;
        }
    }

    public Car()
    {
    }
}

class Program
{
    static void Main()
    {
        Car car = new Car();
        IndependentClass.DoesItWork( car );
    }
}
Run Code Online (Sandbox Code Playgroud)

而这段代码:

public interface IColoredObject<out EnumColorType>
{
    EnumColorType Color
    {
        get;
    }
}

public static class IndependentClass
{
    public static void DoesItWork( object car )
    {
        IColoredObject<object> coloredObject = car as IColoredObject<object>;

        if( coloredObject == null )
            Console.WriteLine( "It doesn't work." );
        else
        {
            Console.WriteLine( "It works." );

            int colorNumber = (int)( coloredObject.Color );

            Console.WriteLine( "Car has got color number " + colorNumber + "." );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图使用Enum.

IColoredObject<Enum> coloredObject = car as IColoredObject<Enum>;
Run Code Online (Sandbox Code Playgroud)

我试图使用IConvertible,这是Enum的界面.

IColoredObject<IConvertible> coloredObject = car as IColoredObject<IConvertible>;
Run Code Online (Sandbox Code Playgroud)

但每次它都不起作用(它是空的).

我该怎么用?或者我该怎么办?

(我不想在代码的第二部分使用EnumColor,因为我想要两个独立的代码只与接口连接.)

Sri*_*vel 8

"值类型"不支持协方差Enum属于此类别,因此不起作用.

通用接口的差异仅支持参考类型.值类型不支持方差.例如,IEnumerable<int> (Visual Basic中的IEnumerable(Of Integer))无法隐式转换为IEnumerable<object>(Visual Basic中的IEnumerable(Of Object)),因为整数由值类型表示.

来源MSDN