C# 嵌套列表—;获取父列表的列表项

C# 嵌套列表—;获取父列表的列表项,c#,list,class,nested,parent-child,C#,List,Class,Nested,Parent Child,我想写一个C#函数,当我通过“Montgomery”时,它返回“alamaba” 第二个示例:锡特卡-->阿拉斯加 以下是示例列表: List<PopulationUSA> result = new List<PopulationUSA>(); PopulationUSA usa = new PopulationUSA("Population in USA", 316128839, new List<PopulationUSA>())

我想写一个C#函数,当我通过“Montgomery”时,它返回“alamaba”

第二个示例:锡特卡-->阿拉斯加

以下是示例列表:

List<PopulationUSA> result = new List<PopulationUSA>();    

        PopulationUSA usa = new PopulationUSA("Population in USA", 316128839, new List<PopulationUSA>());
        result.Add(usa);

        PopulationUSA alabama = new PopulationUSA("Alabama", 4833722, new List<PopulationUSA>());
        usa.Items.Add(alabama);

            alabama.Items.Add(new PopulationUSA("Birmingham", 212113, null));
            alabama.Items.Add(new PopulationUSA("Montgomery", 201332, null));
            alabama.Items.Add(new PopulationUSA("Mobile", 194899, null));

        PopulationUSA alaska = new PopulationUSA("Alaska", 735132, new List<PopulationUSA>()); 
        usa.Items.Add(alaska);

            alaska.Items.Add(new PopulationUSA("Juneau", 32660, null));
            alaska.Items.Add(new PopulationUSA("Ketchikan", 8214, null));
            alaska.Items.Add(new PopulationUSA("Sitka", 9020, null));
列表结果=新列表();
PopulationUSA=新人口usa(“美国人口”,316128839,新列表());
结果:添加(美国);
人口美国阿拉巴马州=新人口美国(“阿拉巴马州”,4833722,新名单());
美国.Items.Add(阿拉巴马州);
阿拉巴马州。项目。添加(新人口美国(“伯明翰”,212113,空));
阿拉巴马州。项目。添加(新人口美国(“蒙哥马利”,201332,空));
阿拉巴马州.Items.Add(新人口美国(“移动”),194899,空);
人口美国阿拉斯加=新人口美国(“阿拉斯加”,735132,新列表());
美国.Items.Add(阿拉斯加);
阿拉斯加.Items.Add(新人口美国(“朱诺”,32660,空));
阿拉斯加.Items.Add(新人口美国(“Ketchikan”,8214,null));
阿拉斯加.Items.Add(新人口美国(“Sitka”,9020,空));
下面是课堂:

    public class PopulationUSA
{
    public PopulationUSA(string name, int value, List<PopulationUSA> items)
    {
        Name = name;
        Value = value;
        Items = items; 
    }

    public string Name { get; set; }
    public int Value { get; set; }

    public List<PopulationUSA> Items { get; set; }
}
public class PopulationUSA
{
公共填充USA(字符串名称、int值、列表项)
{
名称=名称;
价值=价值;
项目=项目;
}
公共字符串名称{get;set;}
公共int值{get;set;}
公共列表项{get;set;}
}
我该怎么做?
谢谢

您可以将此方法添加到PopulationUSA类中

  public string FindParentsOfGrandChildren(string _name)
    {
        List<PopulationUSA> parents = Items.Where(s => s.Items.Any(c => c.Name == _name)).ToList();
        if (parents != null)
        {
            string listparents = string.Empty;
            for (int i = 0; i < parents.Count; i++)
            {
                if (i == 0)
                {
                     listparents += parents[i].Name;
                }
                else
                {
                    listparents += ", " + parents[i].Name;
                }
            }
            return listparents;
        }
        else
        {
            return "Not found";
        }
    }

作为一种递归方法,查找任何类型的父对象(不仅仅是“孙子”)会更好,但这是您的工作

真的不清楚你在问什么或者你的问题在哪里。此外,最好能举一个你迄今为止尝试过的例子,我建议你重组你的课程。用同一类的列表定义的类不能很好地指示如何使用它。@BlakeThingstad那么应该重新设计TreeViewItem吗?@RomanoZumbé-我认为正确使用它是有意义的。对于
TreeView
结构,它绝对有意义,但它有助于名称描述它的用途(以及TreeView的项)。至少,OP可以使类的名称比“PopulationUSA”更具描述性。@RomanoZumbé我不会这么说,因为它的名称表示该结构的使用。我只是说,如果OP没有发布代码,我们根本不知道OP在顶层使用PopulationUSA来代表美国,第二层是州,底层是城市。
 string WhereDoIBelong = usa.FindParentsOfGrandChildren("Montgomery")