D'autres déjà expliqué pourquoi votre code fonctionne - votre exemple est fortement typé, parce que tout est un objet, mais cela signifie que ce n'est pas très utile. Vous ne pouvez pas prendre des éléments de la liste et accéder par exemple à leur propriété Name
, car ils ne sont que des objets, donc cela ne peut pas fonctionner en général.
Cependant, il est possible de créer un fortement typé List
des types anonymes - il a juste besoin d'être fait en utilisant une petite méthode utilitaire comme ceci:
static List<T> CreateList<T>(params T[] items) {
return items.ToList();
}
Le problème est que vous ne pouvez pas appeler un constructeur sans fournir le nom du type. Lors de l'appel d'une méthode, C# peut déduire le paramètre de type, de sorte que vous pouvez écrire ceci:
var testList = CreateList(
new { id = 7, Name = "JonSkeet" },
new { id = 11, Name = "Marc Gravell" });
testList.Add(new { id = 31, Name = "Jason" });
C'est typées parfaitement et vous pouvez par exemple écrire testList[0].Name
pour obtenir le nom de la première personne. Si vous essayez d'écrire quelque chose comme testList.Add(42)
, vous obtiendrez une erreur de compilation, car la liste est fortement typée pour ne contenir que des types anonymes avec les propriétés id
et Name
.
@nettguy - étrange vous avez utilisé des membres d'ici pour remplir votre liste. – JonH
Même les types anonymes dérivent de 'Object'. –
Clarification: Tout ce qui exclut les types de pointeurs est convertible en objet. Tout ne dérive pas réellement de l'objet. http://blogs.msdn.com/ericlippert/archive/2009/08/06/not-everything-derives-from-object.aspx –