J'ai quelques classes:
List<Vehicle> test = new List<Vehicle> ();
foreach ( Car car in cars )
{
test.Add(car);
}
8 Réponses :
@ROBERT HARVEY: Le .NET Framework 3.5 a été publié il y a presque deux ans. Je pense qu'il est prudent de supposer que tout le monde l'a maintenant à moins d'avoir une très bonne raison de ne pas le faire.
Notez que cela se traduit par une nouvelle liste, pas une référence à la même liste.
Ce type de polymorphisme qui vous permet de lancer ilist ilist camion code> dans votre ilist
Il n'essaie pas de le jeter, mais créez une nouvelle instance de liste.
euh non. Il essaie d'attribuer une liste (référence à une) liste du type de base à partir d'une liste (référence à a) du type dérivé et de vous demander pourquoi il obtient NULL. S'il essayait de faire une nouvelle instance, cela fonctionnerait bien.
Voici quelques approches utilisant LINQ:
IList<Derived> list = new List<Derived>(); list.Add(new Derived()); IList<Base> otherlist = new List<Base>(from item in list select item as Base); IList<Base> otherlist2 = new List<Base>(list.Select(item => item as Base));
var vehicles = cars.OfType<IVehicle>()
Vous faites face au problème qu'il y a une co et de la contrevenance limitée en C #. Il y a une approche intéressante en C # 4.0, décrite ici à la fin de . Cependant, il crée d'autres limitations liées au problème du camion dans la réponse du Novelocrat. P>
Vous pouvez également jeter un coup d'œil sur l'article de Cwalina de Krzysztof, Covariance simulée pour les génériques .NET P>
Si vous devez utiliser ilist code> Tout ce que vous avez de la chance et que les réponses ci-dessus peuvent vous aider. Toutefois, si vous pouvez utiliser un iList code> qui est casse comme ienumerable code>, puis réprimé simplement à la destination comme iliste code>, qui fonctionnerait, qui fonctionnerait, Etant donné que ienumerable code> peut accepter une telle pratique. // At the source or at the model.
IEnumerable<BaseType> list = new List<Type>();
// At the destination.
IList<BaseType> castedList = (IList<BaseType>)list;
Notez que iReadonlist iReadonlist ireadonlist Liste Collection
Liée à Stackoverflow. com / questions / 981570 / ... et Stackoverflow.com/Questtions/1296892/... au moins.
Robert Harvey: Bien sûr, il y a une solution alternative; Il pourrait créer une implémentation d'IList qui est fondamentalement une enveloppe sur un iList existant. De cette façon, il n'aurait pas besoin de lancer tous les éléments, seuls ceux qui sont nécessaires.