坚持将特定形式的文本文件加载到列表视图中

Stuck on loading specific form of text file into listview

Z:P

Y:A B C

A:B C

C:B

乙:

$:@

这是我的测试文本文件中的内容。 冒号的左侧将进入列表视图中的包列。 冒号的右侧将进入列表视图中的 D1 D2 D3 ... 列。 我一直在尝试,但一直卡在 for 循环中。它一直在说索引在数组的边界之外,即使我删除了 for 循环并将其放在

PCK.Dependency.Add(text.Split(' ')1);

sample image

    private struct Package
    {
        public string NameOfPackage;
        public List<string> Dependency;
    }

    List<Package> PackageList = new List<Package>();
    Package PCK = new Package();

    private void UI_btnLoad_Click(object sender, EventArgs e)
    {
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            StreamReader sr = new StreamReader(openFileDialog1.FileName);
            string text;
            while ((text = sr.ReadLine()) != null)
            {
                PCK.NameOfPackage = text.Split(':')[0];
                for (int i = 1; i < 10; i++)
                {
                    PCK.Dependency.Add(text.Split(' ')[i]);  //Problem here
                }
                PackageList.Add(PCK);
            }
            ListViewItem lvi = new ListViewItem(PCK.NameOfPackage.ToString());
            for(int i = 1; i < 10; i++)
            {
                lvi.SubItems.Add(PCK.Dependency[i].ToString());
            }
            listView1.Items.Add(lvi);

        }
    }
}

}

我不知道我的问题是什么...请给我一个建议!谢谢。

从 while 循环开始,您应该用这段代码代替。 foreach-loop 确保您不会访问超出数组限制的范围。同样,当您将元素添加到 ListView 时。永远不要使用带有幻数作为上限的循环。

您还在原始循环中做了 10 次相同的拆分,这就像早上系鞋带 10 次一样没用。

        while ((text = sr.ReadLine()) != null)
        {
            PCK.NameOfPackage = text.Split(':')[0];

            string[] dependencies = text.Split(' ');
            foreach(string s in dependencies)
                PCK.Dependency.Add(s);

            PackageList.Add(PCK);
        }

        ListViewItem lvi = new ListViewItem(PCK.NameOfPackage.ToString());
        foreach(string d in PCK.Dependency)
            lvi.SubItems.Add(d);

       listView1.Items.Add(lvi);