Как найти глубину собственности? - PullRequest
0 голосов
/ 24 марта 2020
public class CategoryInModel
{
 public int Id { get; set; }
 public CategoryInModel Parent { get; set; }
}

У меня есть класс, как указано выше. Я хочу получить глубину родительского объекта.

Родительский объект может иметь различную глубину. Например:

Parent.Parent.Parent

или

Parent.Parent

Как узнать глубину родительского объекта?

Ответы [ 2 ]

4 голосов
/ 24 марта 2020

Исходя из логики c, что глубина модели будет равна 1 + родительская глубина:

public class CategoryInModel
{
    public int Id { get; set; }
    public CategoryInModel Parent { get; set; }

    public int Depth => 1 + ParentDepth;
    public int ParentDepth => Parent?.Depth ?? 0;
}
1 голос
/ 24 марта 2020
static int GetDepth (CategoryInModel cat, int depth = -1)
{
    if (cat == null)
        return depth;
    else
        return GetDepth(cat.Parent, depth + 1);
}

А затем использовать:

var mod = new CategoryInModel { Parent = new CategoryInModel { Parent = new CategoryInModel { Parent = new CategoryInModel() } } };

Console.WriteLine(GetDepth(mod));
...