Мои знания о лямбда-выражениях немного шатки, хотя я могу писать код, использующий лямбда-выражения (он же LINQ), я пытаюсь написать собственный метод, который принимает несколько аргументов типа лямбда-выражения. *
Справочная информация. Я пытаюсь написать метод, который возвращает коллекцию объектов типа TreeItem из буквально ЛЮБОГО другого типа объекта. Пока у меня есть следующее:
public class TreeItem
{
public string Id { get; set; }
public string Text { get; set; }
public TreeItem Parent { get; protected set; }
public IList<TreeItem> Children
{
get
{
// Implementation that returns custom TreeItemCollection type
}
}
public static IList<TreeItem> GetTreeFromObject<T>(IList<T> items,
Expression<Func<T, string>> id,
Expression<Func<T, string>> text,
Expression<Func<T, IList<T>>> childProperty) where T : class
{
foreach (T item in items)
{
// Errrm!?? What do I do now?
}
return null;
}
}
... который можно вызвать через ...
IList<TreeItem> treeItems = TreeItem.GetTreeFromObject<Category>(
categories, c => c.Id, c => c.Name, c => c.ChildCategories);
Я мог бы заменить выражения на строковые значения и просто использовать отражение, но я пытаюсь избежать этого, поскольку хочу сделать его строго типизированным.
Мои причины для этого состоят в том, что у меня есть элемент управления, который принимает список типа TreeItem, тогда как у меня есть десятки различных типов, которые находятся в древовидной структуре, и я не хочу писать отдельные методы преобразования для каждого тип (пытаясь придерживаться принципа СУХОЙ).
Правильно ли я поступаю? Возможно, есть лучший способ сделать это?