Простой ответ: «Вы не должны».
Существует трюк hacky , который позволяет вам сделать это:
var myList = new[] { new { X = (object) null, Y = (object) null } }.ToList();
myList.Clear();
foreach (object x in GetAllX())
// ...
Но было бы более разумно использовать его так, как это было задумано:
var myList = GetAllX().Where(x => Process(x))
.SelectMany(x => GetAllY(x).Select(y => new { X = x, Y = y }))
.ToList();
Если вы действительно не можете использовать этот чисто функциональный стиль по какой-либо причине, или вы обнаружите, что должныСоздавая такой список в нескольких местах, вы, вероятно, должны объявить обычный класс вместо использования анонимного типа.Помните, что анонимные типы в любом случае компилируются в классы, поэтому анонимные типы не выигрывают в производительности, и даже преимущество читабельности / удобства сопровождения сомнительно, если вам приходится прибегать к хитростям, подобным хакерским в верхней части этого поста.
Некоторые люди предлагают использовать List<dynamic>
, но я рекомендую против этого.Это сильно затрудняет ремонтопригодность, потому что имена и типы свойств больше не проверяются во время компиляции (вы можете набрать один из них и получить ошибку во время выполнения);это замедляет производительность во время выполнения, потому что каждый доступ проходит через динамический диспетчер;а также, когда вы помещаете свои объекты в этот список, вы в основном застреваете с их динамичностью, потому что вы не можете привести их обратно к анонимному типу.