En C#, pourquoi pas une Liste<string> object être stockés dans une Liste<object> variable

Il semble que l'un des objets de la Liste ne peuvent pas être stockés dans une Liste de variables en C#, et ne peut même pas être explicitement exprimés de cette façon.

List<string> sl = new List<string>();
List<object> ol;
ol = sl;

résultats est Impossible de convertir implicitement le type System.Collections.Generic.List<string> à System.Collections.Generic.List<object>

Et puis...

List<string> sl = new List<string>();
List<object> ol;
ol = (List<object>)sl;

résultats Ne peut pas convertir le type de System.Collections.Generic.List<string> à System.Collections.Generic.List<object>

Bien sûr, vous pouvez le faire en tirant sur tout ce qui sort de la liste de chaînes et de le remettre dans un à la fois, mais c'est plutôt alambiqué solution.

  • Ça va changer avec C# 4.0, de sorte que vous pourriez voulez de recherche de la covariance et la contravariance. Il permettra à de telles choses dans un type de manière sécuritaire.
  • Plus ou moins double: stackoverflow.com/questions/317335/...
  • Jean - > C#4 ne le permettrons pas. Penser à l'ol.Add(new object());
  • Il est répondu par Jon Skeet ici: stackoverflow.com/a/2033921/1070906