【问题标题】:Associations Class (List in a List)关联类(列表中的列表)
【发布时间】:2013-04-15 18:19:05
【问题描述】:

我有 2 个与一个和另一个相关联的类,一个城镇中有很多人。

public class Town
{
    List<People> collectionOfPeople;

    public string town { get; set; }

    public Town()
    {
        townName = "";

        collectionOfPeople = new List<People>();
        collectionOfPeople.Add(new People());
    }

    public Town(string tmp_townName)
    {
        townName = tmp_townName;

        collectionOfPeople = new List<People>();
        collectionOfPeople.Add(new People("Daniel Smith", "22"));
    }
}

在 List 中构造一个 Town 实例以及与之关联的记录后,我想在 Form 上显示结果。

    private int numberOfPeople;
    private int currentPeopleShown;
    private int numberOfTown;
    private int currentTown;
    private List<People> peopleList;
    private List<Town> townList;

    // ************************* Methods/Functionality
    private void LoadData()
    {
        txt_townName.Text = (townList[0]).townName;
        txt_peopleName.Text = (peopleList[currentPeopleShown]).name;

        numberOfPeople = peopleList.Count();
        currentPeopleShown = 0;
    }

如何在列表中引用列表,以显示或计算其中的记录数(town0 .. show people1、2、3 等)?

【问题讨论】:

  • 你的意思是nested list
  • 如果您只想显示列表项,您可以使用 for 或 foreach 循环遍历它们

标签: c# forms list class


【解决方案1】:

您必须将列表公开为属性

public List<People> CollectionOfPeople { get; set; }
^                                      ^ ^    ^    ^

然后像这样引用它:

var people = myTown.CollectionOfPeople;

【讨论】:

  • 您能否缩小我要进行更改的范围?这两个类都位于单独的 cs 文件中,并且在我编辑它们时会导致问题。
  • 查看我的更新(我添加了一些刻度线以指示所需的更改)。
  • 当我更改 Town 类 List 时,它会在下面的构造函数中标记一个错误。 “在上下文等中不存在”
  • 好吧,我没有给你确切你需要的代码更改,因为我面前没有你程序的源代码(请不要将所有内容粘贴在这里)。我的回答是概念性的;我在您向我们展示的代码中看到 collectionOfPeople 不可访问,因此我将其设置为可访问。这是否是满足您需求的正确解决方案,您必须自己弄清楚。
  • 我以为我在错误的地方输入了它!。感谢您的帮助!
【解决方案2】:

您可以使用 SelectMany(...) 将所有嵌套项合并为单个可编号

townList.SelectMany(t=>t.collectionOfPeople).Count();

【讨论】:

    【解决方案3】:

    如何在列表中引用列表,以显示或计算其中的记录数。 (town0 .. 显示 people1,2,3 等)

    foreach (Town town in townList)
      foreach (People people in town.collectionOfPeople)
        MessageBox.Show(people.Name);
    

    【讨论】:

      猜你喜欢
      • 2011-03-11
      • 2018-10-08
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多