C'est exactement la meme chose. Tu ne peux pas caster un List<truc> en List<bidule> car ca obligerai a caster chacun des elements, mais une fois que tu as trouve un element, tu peux le caster de truc en bidule, et l'heritage ne change rien a ca...
Version imprimable
C'est exactement la meme chose. Tu ne peux pas caster un List<truc> en List<bidule> car ca obligerai a caster chacun des elements, mais une fois que tu as trouve un element, tu peux le caster de truc en bidule, et l'heritage ne change rien a ca...
on est bien d'accord. L'interet de la liste générique est quand même de s'assurer du typage de la collection et de ne pas avoir à caster. Donc en réponse à neptune je me demandai si on pouvait faire quelquechose qd même avec une list<T> plutot qu'une arraylist dans ce cas.
Dans quelques temps, tu pourras officiellement faire un :
avec les méthodes d'extension de .NET 3.5 :)Code:
1
2 List<object> list = ...; List<int> listInt = list.OfType<int>();
Attention OfType() ne revoie pas une List mais un IEnumerable, donc ici ca ne marchera pas. =)
Puis au pire en 2.0 tu peux deja faire un :
Code:
1
2
3
4 List<object> list = new List<object>(); List<int> list1 = list.ConvertAll<int>(delegate(object o) { return (int)o; });
Yep effectivement intéressant une méthode du type :
permet de récupérer des collections de fils. Pas mal. Bcp de plomberie qd même :) et on voit qd même poindre les problèmes de covariance ect...auxquels d'ailleurs faudrait que je m'intéresse un peu plusCode:
1
2
3
4 public List<T> GetListGenerique<T>() where T : Parent { return this.m_oListe.ConvertAll<T>( delegate( Parent o ) { return (T)o; } ); }
Néanmoins l'affectation à la liste reste problématique car autant l'on peut faire
mais l'affectation ci-dessous est refusé car List<T> est invariantCode:
1
2 Child[] oArrayChild = new Child[1]; Parent[] oArrayParent = oArrayChild;
Code:
1
2 List<Child> oListeChild = new List<Child>(); List<Parent> oListeParent = oListeChild;