AJS135 Ответов: 2

Сериализация вложенных циклов


У меня есть список объектов, которые я хочу повторить в цикле с datetime. в значительной степени я пытаюсь повторить первый объект в списке со всеми 3 датами. промойте и повторите со следующим объектом.

Пример
первый объект с 1-й датой
первый объект 2-я дата
первый объект 3 Дата
второй объект первое свидание.
и т.д.

проблема в том, что внутренний цикл вообще не выполняется. потому что я, когда его сериализую, документ пустой.


public  class Inventory
   {
       StreamWriter sw;
       XmlSerializer serial;
       const string Inventory_Filename = @"..\..\roominventory.xml";




       public Inventory() { }
       public void CreateInvenList()
       {

           Random rnd = new Random();
           int num = rnd.Next(1, 10);
           DateTime end = new DateTime(2016,09,28);
           DateTime start = new DateTime(2016, 09, 25);

           List<InventoryType> Inventoryttype = new List<InventoryType>();

           for ( DateTime date = start; date < end; date = date.AddDays(1) )
        {
               foreach (InventoryType p in Inventoryttype)
               {
                 p.Inventoryttype.Add(new InventoryType(date, "123", "KB", num));
                 p. Inventoryttype.Add(new InventoryType(date, "124", "qB", num));
               }


         }




               serial = new XmlSerializer(Inventoryttype.GetType());
               sw = new StreamWriter(Inventory_Filename);
               serial.Serialize(sw, Inventoryttype);
               sw.Close();


       }
   }


Что я уже пробовал:

я пытался инициализировать список вне цикла, но когда он добирается до кода сериализации, он игнорирует цикл и просто использует список.

[no name]

Foreach *выполняется, вы просто пытаетесь выполнить итерацию по пустому списку. Не менее ценным навыком является умение запускать код в отладчике.

2 Ответов

Рейтинг:
2

AJS135

k если я заполню список, как он будет вызван в цикле foreach ? и как бы я повторил дату до него, если бы мне пришлось инициализировать его в списке.

List<InventoryType> Inventoryttype = new List<InventoryType>();
            Inventoryttype.Add(new InventoryType(start, "123", "KB", num));
            Inventoryttype.Add(new InventoryType(start, "124", "qB", num));

            for ( DateTime date = start; date < end; date = date.AddDays(1) )
         {
                foreach (??)
                {
                   // what goes in here? 
                }


          }

                serial = new XmlSerializer(Inventoryttype.GetType()); 
                sw = new StreamWriter(Inventory_Filename);
                serial.Serialize(sw, Inventoryttype);
                sw.Close();
            

        }
    }


[no name]

Это не решение, это совершенно другой вопрос. Может быть, какое-то логическое мышление в порядке. Если у вас уже есть инициализированные объекты в вашем списке,зачем вам нужно foreach над ними? Ваш код и ни один из ваших вопросов не совпадают и не имеют смысла.

David_Wimbley

Для 1 это не ответ. Вы должны удалить это и прокомментировать оригинальное решение Griffs.

номер 2 все что вы делаете это

p. Inventoryttype.Add (new InventoryType(date, "123", "KB", num));
p. Inventoryttype.Add (new InventoryType(date, "124", "qB", num));

Добавление даты и некоторой произвольной переменной "num" через ваш конструктор.

Удалите p. из типа P. Inventoryttype.Добавьте, что заполнит список, затем удалите цикл foreach, который, по вашему мнению, вам нужен, и просто сделайте добавление в список внутри вашего цикла for (DateTIme date = start).

AJS135

k позвольте мне уточнить, что я пытаюсь сделать, это сериализовать это в xml для отображения

/ InventoryType/
/Дата/ 20160925 / Дата/
/HotelId/ 123 /HotelId/
/Просторные/ КБ /просторные/
/Количество / 3 / Количество/
/ InventoryType/


и так далее, так что мне понадобится еще один цикл, чтобы повторить список инвентаря внутри цикла, который будет повторять первую дату, через последнюю дату.

поэтому, рассказывая мне, вынимая внутреннюю петлю, я могу достичь этого. я не понимаю, как это возможно?

Рейтинг:
0

OriginalGriff

Посмотрите на свой код:

   List<InventoryType> Inventoryttype = new List<InventoryType>();
   for ( DateTime date = start; date < end; date = date.AddDays(1) )
{
       foreach (InventoryType p in Inventoryttype)
       {
         p.Inventoryttype.Add(new InventoryType(date, "123", "KB", num));
         p. Inventoryttype.Add(new InventoryType(date, "124", "qB", num));
       }
 }
Вы создаете список, но вы не заполните его, затем попробуйте добавить подпункты к каждому из элементов в коллекции...так что foreach петля никогда не входит в тело, чтобы добавить что-нибудь к предметам, которых там нет!

Как сказал NotPoliticallyCorrect: вам нужно научиться использовать отладчик - вы бы заметили это в мгновение ока, если бы это было так.