Я ожидал бы, что это произойдет, если я начну свой временный список за пределами цикла, но я не так понимаю, почему я получаю результат, который я получаю.Мой код по сути:
foreach (DataRow dtRow in dt.Rows)
{
List<IItemData> tempTable = new List<IItemData>();
tempTable = CreateCopyOfTemplate(item, new List<IItemData>(), tableTemplate, itemDataList, item.Id, tableSortOrder);
foreach (IItemData itemData in tempTable)
{
if (itemData.Content.StartsWith("cdt:") && itemData.DataSource.Description == nameof(DataSource.CustomDataTableValue))
{
itemData.Content = dtRow[itemData.Content.Replace("cdt:", "")].ToString();
}
}
tableSortOrder++;
itemDataList.AddRange(tempTable.ToList());
}
private static List<IItemData> CreateCopyOfTemplate(IItemData itemData, List<IItemData> newTable, List<IItemData> templateTable, List<IItemData> originalTable, int? origParentId, int tableSortOrder)
{
List<IItemData> childList = templateTable.Where(x => x.ParentId == origParentId).ToList();
if (itemData.DataSource != null && itemData.DataSource.Description == nameof(DataSource.CustomDataTable))
{
itemData.Id = originalTable.Max(x => x.Id) + 1;
itemData.SortOrder = tableSortOrder;
newTable.Add(itemData);
}
foreach (IItemData childItem in childList)
{
origParentId = childItem.Id;
childItem.ParentId = itemData.Id;
childItem.Id = newTable.Max(x => x.Id) + 1;
newTable.Add(childItem);
CreateCopyOfTemplate(childItem, newTable, templateTable, originalTable, origParentId, tableSortOrder);
}
return newTable;
}
Где на каждом проходе цикла ForEach я создаю новый List<IITemData>
с именем tempTable.Я заполняю это методом, несколькими другими битами, а затем добавляю его в диапазон другого списка с именем itemDataList.
Сначала я инициировал список tempTable в цикле, а также использовал ToList () при применении кОднако в главном списке все записи, добавленные на первом проходе цикла, обновляются значениями второго прохода цикла, что приводит к дублированию данных в моем списке!
У меня такое чувство, что яупустить что-то очевидное, но это был долгий день, и я просто не могу этого понять.