2014-02-26 70 views
2

轉換錯誤,我得到了下面的代碼,這讓我編譯錯誤:與一般的協方差

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

我已經找到了答案在這裏: Is this a covariance bug in C# 4?

通常,值類型不支持差異。這就是爲什麼它不會爲int工作,但對字符串有效。