Ваш код выглядит довольно хорошо, но есть несколько моментов, которые стоит проверить, чтобы убедиться, что метод BuildHierarchy
работает корректно и возвращает ожидаемые результаты. Давайте рассмотрим несколько возможных причин, по которым hierarchicalCostItems
может не возвращать ожидаемые данные.
1. Проверка входных данных
Убедитесь, что список costItems
, передаваемый в метод BuildHierarchy
, не пуст. Если он пуст, то и иерархия не будет построена. Вы можете добавить отладочный вывод перед вызовом BuildHierarchy
:
// Построение иерархии
if (costItems.Count == 0)
{
// Логирование или отладочный вывод
Console.WriteLine("costItems is empty.");
}
var hierarchicalCostItems = BuildHierarchy(costItems);
2. Проверка метода GetParentNumberItem
Убедитесь, что метод GetParentNumberItem
работает корректно и возвращает правильные значения. Если он возвращает неправильные значения, это может привести к тому, что иерархия не будет построена должным образом.
3. Проверка метода BuildChildren
Убедитесь, что метод BuildChildren
корректно добавляет дочерние элементы. Если lookup
не содержит дочерних элементов для родительского элемента, то иерархия не будет построена.
4. Проверка структуры CostItemAddViewModel
Убедитесь, что у вас есть свойство Children
в классе CostItemAddViewModel
. Если его нет, то вы не сможете добавлять дочерние элементы. Например:
public class CostItemAddViewModel
{
public string NumberItem { get; set; }
public List<CostItemAddViewModel> Children { get; set; } // Убедитесь, что это свойство существует
// Другие свойства...
}
5. Логирование
Добавьте логирование в ключевые места, чтобы отслеживать, что происходит в вашем коде. Это поможет вам понять, где именно происходит сбой.
6. Проверка на null
Убедитесь, что вы проверяете на null
и обрабатываете возможные исключения, чтобы избежать неожиданных сбоев.
Пример отладки
Вот пример, как можно добавить отладочные сообщения:
private List<CostItemAddViewModel> BuildHierarchy(List<CostItemAddViewModel> items)
{
var lookup = items.ToLookup(i => GetParentNumberItem(i.NumberItem));
var rootItems = items.Where(i => string.IsNullOrEmpty(GetParentNumberItem(i.NumberItem))).ToList();
Console.WriteLine($"Found {rootItems.Count} root items.");
foreach (var item in rootItems)
{
BuildChildren(item, lookup);
}
return rootItems;
}
Заключение
Проверьте указанные выше моменты, и, скорее всего, вы сможете найти причину, по которой hierarchicalCostItems
не возвращает ожидаемые данные. Если после всех проверок проблема все еще остается, попробуйте предоставить больше информации о том, что именно не работает, и я постараюсь помочь вам более детально.