Причина, по которой это ведет себя не так, как вы могли ожидать, состоит в том, что items
, имеющий тип List<string>
, является ссылочным типом, а не типом значения. Эту концепцию вам нужно будет хорошо понять при разработке с использованием управляемых языков, таких как C#. MSDN - Ссылка и значение
Упрощенно то, что вы говорите под pricingCard[i].Items = items;
, состоит в том, что pricingCard[i].Items
теперь является ссылкой на items
. Это означает, что в любой момент после этого оценка pricingCard[i].Items
просто «отсылает» вас к items
, поэтому любые изменения в items
будут отражаться во всех ссылках, которые вы сделали на него.
Что вам нужно сделать для каждого l oop, так это «повторно создать экземпляр» items
с items = new List<string>()
. Это означает: создайте новый экземпляр списка, и новый экземпляр будет ссылаться на следующую итерацию pricingCard[i].Items
.
while(i < pricingCard.Count)
{
items = new List<string>();
// Do the rest of your process
}
В качестве альтернативы добавьте элементы напрямую:
while (listReader.Read())
{
pricingCard[i].Items.Add(listReader["Item"].ToString());
}
PS
Вместо использования:
int i = 0;
while(i < pricingCard.Count)
{
i++;
}
Попробуйте:
for (int i = 0; i < pricingCard.Count; i++)
{}