我不斷看到此錯誤,一遍又一遍:C#拒絕接受通用的子類型
無法轉換從
Item<Foo>
到Item<IFoo>
。
這顯然是無稽之談; Item<Foo>
類型的對象是靜態保證能夠完成Item<IFoo>
可以做的所有事情(可能還有更多),那麼爲什麼編譯器拒絕接受我完全有效的代碼呢?
我有一個方法接受Item<IFoo>
作爲參數。出於某種原因,它拒絕接受Item<Foo>
作爲輸入,即使Foo
實施了IFoo
。這完全沒有意義。我可以通過Foo
代替IFoo
,但我無法通過Item<Foo>
代替Item<IFoo>
。爲什麼?
public class Item<T>
{
public readonly int ID;
public readonly T Data;
...
}
public void ProcessItem(Item<IFoo> item)
{
Console.WriteLine(item.ID);
}
ProcessItem(new Item<Foo>());
你能顯示你的代碼嗎? –
聽起來像[協方差](http://msdn.microsoft.com/en-us/library/ee207183.aspx)問題。您使用的是什麼版本的.NET,並且可以顯示拋出此錯誤的代碼? –
'Item'有點像List嗎? –