可能重複的一些問題:
Upcasting and generic lists與發送列表<T>爲IEnumerable <T>的方法
好吧,我想送一個List<CardHolder>
爲IEnumerable<ICardHolder>
其中CardHolder : ICardHolder
。然而,編譯器錯誤:
錯誤4參數 '1':無法從 'System.Collections.Generic.List' 到 'System.Collections.Generic.IEnumerable' 轉換
這似乎很奇怪對我來說,考慮一個List<T> : IEnumerable<T>
。出了什麼問題?
public interface ICardHolder
{
List<Card> Cards { get; set; }
}
public class CardHolder : ICardHolder
{
private List<Card> cards = new List<Card>();
public List<Card> Cards
{
get { return cards; }
set { cards = value; }
}
// ........
}
public class Deck : ICardHolder
{
// .........
public void Deal(IEnumerable<ICardHolder> cardHolders)
{
// ........
}
// .........
}
public class Game
{
Deck deck = new Deck();
List<CardHolder> players = new List<CardHolder>();
// .........
deck.Deal(players); // Problem is here!
// .........
}
沒有,所以我需要將我的列表轉換爲列表能夠將它作爲IEnumerable 發送?哦,是否有可能在VS2008上獲得某種C#4.0的預覽? –
2009-08-14 21:41:01
這裏有一篇關於泛型中的co/contravariance的優秀InfoQ文章:http://www.infoq.com/news/2008/08/GenericVariance – 2009-08-14 21:41:39
+50泛型方法(如果可以的話)。謝謝! – 2009-08-14 21:50:35