Possible en double:
Upcasting and generic listsQuelques problèmes avec l'envoi de la liste <T> comme IEnumerable <T> à une méthode
Ok, je veux envoyer un List<CardHolder>
comme IEnumerable<ICardHolder>
où CardHolder : ICardHolder
. Cependant, les erreurs du compilateur:
erreur 4 Argument '1': ne peut pas convertir 'System.Collections.Generic.List' à 'System.Collections.Generic.IEnumerable'
Cela semble étrange pour moi, compte tenu d'un List<T> : IEnumerable<T>
. Qu'est-ce qui ne va pas?
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!
// .........
}
OK, donc je dois convertir ma liste Liste de pouvoir l'envoyer en IEnumerable? Oh, et est-il possible d'avoir une sorte d'aperçu pour C# 4.0 sur VS2008? –
Il ya un excellent article InfoQ sur la co/contravariance dans les génériques ici: http://www.infoq.com/news/2008/08/GenericVariance –
+50 pour la méthode générique (si je pouvais). Je vous remercie! –