La réponse simple est "vous ne devriez pas".
Il y a un hacky astuce qui vous permet de le faire:
var myList = new[] { new { X = (object) null, Y = (object) null } }.ToList();
myList.Clear();
foreach (object x in GetAllX())
// ...
Mais il serait vraiment plus raisonnable d'utiliser la façon dont il a été conçu:
var myList = GetAllX().Where(x => Process(x))
.SelectMany(x => GetAllY(x).Select(y => new { X = x, Y = y }))
.ToList();
Si vous ne pouvez pas vraiment utiliser ce style purement fonctionnel pour une raison quelconque, ou si vous trouvez que vous devez instancier une telle liste à plusieurs endroits, vous devriez probablement déclarer une classe normale au lieu d'utiliser un anonymou. type s. Rappelez-vous que les types anonymes sont compilés dans les classes, donc il n'y a aucun avantage de performance pour les types anonymes, et même l'avantage de lisibilité/maintenabilité est discutable si vous devez recourir à des astuces comme le hacky en haut de ce post.
Certaines personnes suggèrent d'utiliser List<dynamic>
, mais je le déconseille. Cela gêne gravement la maintenabilité, car les noms et les types de propriétés ne sont plus vérifiés lors de la compilation (vous pourriez en faire une erreur et obtenir un bogue d'exécution); il ralentit les performances d'exécution car chaque accès passe par le répartiteur dynamique; et aussi, une fois que vous avez placé vos objets dans cette liste, vous êtes fondamentalement coincé avec eux étant dynamique, parce que vous ne pouvez pas les renvoyer au type anonyme.
possible duplicate of [Une liste générique de la classe anonyme] (http://stackoverflow.com/questions/612689/a-generic-list-of-anonymous-class) – nawfal