У меня есть плоский список категорий, как показано в следующих классахОтображение плоского списка иерархического списка с родительским идентификаторы C#
public class FlatCategoryList
{
public List<FlatCategory> Categories { get; set; }
}
public class FlatCategory
{
public string ID { get; set; }
public string Name { get; set; }
public string ParentID { get; set; }
}
Я пытаюсь сопоставить мой плоский список категорий к heirarical структуры например, как показано ниже:
public class HieraricalCategoryList
{
public List<Category> Categories { get; set; }
}
public class Category
{
public string ID { get; set; }
public string Name { get; set; }
public string ParentID { get; set; }
public List<Category> ChildCategories { get; set; }
}
Мой вопрос, что является лучшим способом для достижения этой цели, учитывая тот факт, что там может быть бесконечное число дочерних уровней?
public HieraricalCategoryList MapCategories(FlatCategoryList flatCategoryList)
{
var hieraricalCategoryList = new HieraricalCategoryList();
//Do something here to map the flat category list to the hierarichal one...
return hieraricalCategoryList;
}
Ключом к этому является НЕ использовать рекурсию. –
Только сторона не для лучшего программирования. Вы должны сделать свои свойства IEnumerable и т. Д. Вместо списка. Таким образом вы можете установить все, что наследует IEnumerable, к тем свойствам, как массив, список или все, что вы создаете, который наследует IEnumerable. –
Если вам нужно сделать кучу пользовательского сопоставления по всему пространству, есть большая библиотека для этого, называемая AutoMapper. http://automapper.org/ –