C # Динамический список объектов - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть маленький объект "Категория"

Id
Name 
Parent_id

Я хочу переопределить ToString () строкой всех родителей элемента, и я не знаю, сколько родителей у элемента.

Example: (pseudo code)
Item1 =>  Id = 1, Name = Computers, Parent_id = null 
Item2 =>  Id = 2, Name = Laptops  , Parent_id = 1
Item3 =>  Id = 3, Name = Acer     , Parent_id = 2

На выходе из Item3.ToString () я хочу, чтобы результат был "Computers > Laptops > Acer". И мне нужно, чтобы он был динамичным, поэтому я не знаю, сколько шагов нужно предпринять ... Есть свежие идеи?

Ответы [ 3 ]

0 голосов
/ 08 декабря 2011

Сначала вам нужно добавить сам родительский элемент (а не только идентификатор) к каждому элементу, затем это должно быть достаточно просто с помощью простого цикла:

public override string ToString()
{
    List<string> names = new List<string>();
    names.Add(this.Name);
    Category parent = this.Parent;
    while (parent != null)
    {
        names.Add(parent.Name);
        parent = parent.Parent;
    }
    names.Reverse();
    return string.Join(" > ", names);
}
0 голосов
/ 08 декабря 2011
public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Category Parent { get; set; }

    public override string ToString()
    {
        return Parent == null 
            ? Name
            : string.Format("{0} > {1}", Parent, Name);
    }
}

Использование:

item1 = new Category{Id = 1, Name = "Computers"};
item2 = new Category{Id = 2, Name = "Laptops", Parent = item1};
item3 = new Category{Id = 3, Name = "Acer", Parent = item2};

Debug.Print(item3.ToString());
Debug.Print(item2.ToString());
Debug.Print(item1.ToString());

Результат:

Computers > Laptops > Acer
Computers > Laptops
Computers
0 голосов
/ 08 декабря 2011

Вы должны сделать это рекурсивно:

public overrides string ToString()
{
    string build = parent.ToString();
    if (!String.IsNullOrEmpty(build)) build += " > ";
    build += Name;
    return build
}

Что-то в соответствии с вышесказанным должно сделать это - каждая сущность будет вызывать ToString для своего родителя, чтобы вы получили список всех сущностей в иерархии. Это будет работать независимо от того, насколько глубока иерархия (в пределах разумного).

Примечание: для этого вам понадобится ссылка на родителя, либо вы можете использовать свойство, либо вы можете искать сущность, используя уже имеющееся у вас свойство parentid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...