具有通用协方差的转换错误

时间:2014-02-26 19:29:33

标签: c#-4.0 generics covariance

我得到了以下代码,它给了我编译错误:

cannot convert from 'UserQuery.SomeClass<int>' to UserQuery.Interface<System.IConvertible>'

代码:

void Main()
{
    List<Interface<IConvertible>> values = new List<Interface<IConvertible>>();
    values.Add(new SomeClass<int>() {Value = 50 });
}

interface Interface<out T> where T : IConvertible
{
   T Value { get; }
}
class SomeClass<T> : Interface<T> where T : IConvertible
{
   public T Value { get; set; }
}

但是,尝试添加SomeClass<string>可以正常工作。

values.Add(new SomeClass<string>() {Value = "50" });

有没有人可以解释一下为什么我可以为字符串做这个,但不是为了int而不是为了等等...

1 个答案:

答案 0 :(得分:1)

我在这里找到了答案: Is this a covariance bug in C# 4?

通常,值类型不支持差异。这就是为什么它不适用于int,但适用于字符串。