Получить все Свойство определенного класса с одним свойством родителя - PullRequest
0 голосов
/ 02 ноября 2018

Пожалуйста, примите во внимание следующие коды:

class ClassA
{
    public int ID { get; set; }
    public string Name { get; set; }
    public ClassA PropA { get; set; }
}

class ClassC
{
    public ClassC()
    {
        var MyVar = new List<ClassA>
        {
            new ClassA()
            {
                ID = 1,
                Name = "Name1",
                PropA = new ClassA()
                {
                    ID = 2,
                    Name = "Name2",
                    PropA = new ClassA()
                    {
                        ID = 3,
                        Name = "Name3",
                        PropA = new ClassA()
                        {
                            ID =4,
                            Name = "Name4",
                            PropA = null,
                        }
                    }

                }
            },
            new ClassA()
            {
                ID = 5,
                Name = "Name5",
                PropA = new ClassA()
                {
                    ID = 6,
                    Name = "Name6",
                    PropA = null,
                }
            },
            new ClassA()
            {
                ID = 7,
                Name = "Name7",
                PropA = null,
            },
            new ClassA()
            {
                ID = 8,
                Name = "Name8",
                PropA = new ClassA()
                {
                    ID = 9,
                    Name = "Name9",
                    PropA = new ClassA()
                    {
                        ID = 10,
                        Name = "Name10",
                        PropA = new ClassA()
                        {
                            ID = 11,
                            Name = "Name11",
                            PropA = null,
                        }
                    }
                }
            },
        };
    }
}

Я хочу получить все ClassA свойства, которые не равны NULL, и со свойством name своего родителя. Например:

   Parent        Class A
--------------------------------
1)"Name1"     Class A with ID = 2
2)"Name2"     Class A with ID = 3
3)"Name3"     Class A with ID = 4
4)"Name5"     Class A with ID = 6
and...

Спасибо

1 Ответ

0 голосов
/ 02 ноября 2018

Вы имеете в виду что-то вроде этого (C # 7):

private static IEnumerable<string> Describe(ClassA a)
{
    var (parent, current) = (a, a.PropA);

    while (!(current is null))
    {
        yield return $"{parent.Name}     Class A with ID = {current.ID}";
        (parent, current) = (current, current.PropA);
    }
}
...
var results = MyVar.SelectMany(Describe);

Как и требовалось в комментарии, версия C # 4:

private static IEnumerable<string> DescribeCSharp4(ClassA a)
{
    var parent = a;
    var current = a.PropA;

    while (current != null)
    {
        yield return parent.Name + "     Class A with ID = " + current.ID;

        parent = current;
        current = current.PropA;
    }
}
...
var results = MyVar.SelectMany(DescribeCSharp4);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...