【问题标题】:Can't display List of Objects无法显示对象列表
【发布时间】:2013-11-22 15:41:45
【问题描述】:

我有一个包含多个字符串列表的对象列表。当我使用 foreach 循环显示对象列表时,一切都按原样显示,但是当我尝试在控制台中显示循环之外的两个对象时,我只看到第一个对象。我会很感激你的帮助

        items = new List<Object>();
        items = fileOp.GetAnylisedCollection(PATH);

        foreach (Object lists in items)
        {
            foreach (String list in (List<String>)lists)
            {
                Console.Write(list + " | ");
            }
            Console.WriteLine();
        }

        Console.WriteLine();
        Console.WriteLine();
        List<string> check = (List<string>)items[0];
        Console.WriteLine(check[0] + check[1]);

返回列表的函数:

public List<Object> GetAnylisedCollection(String path)
    {
        int count = 0;
        int prevSeparate = 0;
        string line;
        string toList = String.Empty;
        List<Object> items = new List<Object>();
        List<string> item = new List<string>();

        StreamReader sr = new StreamReader(path);

        //reading file line by line to string array
        string[] str = new string[200];

        while ((line = sr.ReadLine()) != null)
        {
            str[count] = line;
            count++;
        }
        Array.Resize(ref str, count);

        //array analysis and writing to collection
        for (int i = 0; i < str.Length; i++)
        {
            char[] temp = str[i].ToCharArray();
            for (int j = 0; j < temp.Length; j++)
            {
                toList = string.Empty;
                if (temp[j].Equals('|'))
                {
                    if (prevSeparate != 1) prevSeparate++;

                    for (int k = prevSeparate; k < j; k++)
                    {
                        toList += temp[k].ToString();
                    }
                    Console.WriteLine(toList);
                    item.Add(toList);
                    prevSeparate = j;
                }
            }
            items.Add(item);
            item = new List<string>();
            Console.WriteLine();
        }
        return items;
    }

控制台输出:

//使用foreach输出 |波士顿洛根国际 (BOS) |纽约约翰肯尼迪 (JFK) | 1200 | 10.11.2013 | |波士顿洛根国际 (BOS) |萨克拉门托国际 (SMF) | 430 | 10.11.2013 | |克利夫兰霍普金斯国际 (CLE) |萨克拉门托国际 (SMF) | 543 |1.11.2013| |北京首都 (PEK) |纽约约翰肯尼迪 (JFK) | 2500 | 13.11.2013 | |莫斯科多莫杰多沃 (DME) |波士顿洛根国际 (BOS) | 1230 | 15.11.2013 | |华盛顿罗纳德·里根 (DCA) |杜兰戈拉普拉塔 (DRO) | 340 | 14.11.2013 | |亚特兰大哈兹菲尔德-杰克逊 ATL (ATL) |华盛顿罗纳德·里根 (DCA) | 450 | 7.11.2013| |萨克拉门托国际 (SMF) |亚特兰大哈兹菲尔德-杰克逊 ATL (ATL) | 325 | 6.11.2013| |纽约约翰肯尼迪 (JFK) |北京首都 (PEK) | 2300 | 19.11.2013 | |克利夫兰霍普金斯国际 (CLE) |纽约约翰肯尼迪 (JFK) | 360 | 2.11.2013| //简单输出 波士顿洛根国际 (BOS)

这将显示为:

波士顿洛根国际 (BOS) 纽约约翰肯尼迪 (JFK)

【问题讨论】:

  • 也许您的第二项为空或空?没有更多信息是不可能的。您可以尝试将每个字符串写在单独的行上以使其更清晰。
  • 为什么要调用单个字符串list
  • 另一个问题,应该显示什么?正确的显示器对你来说应该是怎样的?
  • 从对象列表中我得到一个对象并将其转换为字符串列表。我要打印的第一个和第二个元素都包含在第一个列表中。列表不为空,因为这些项目中的每一个都显示为一个循环
  • 为什么要在示例的第一行创建一个新的List&lt;Object&gt;,只是为了在第二行丢弃该对象?

标签: c# list collections foreach console


【解决方案1】:

有些事情不是你想象的那样。看看你的行上的第一个字符。它是一个管道,但永远不要在行首打印此字符,而只能在从第一个列表中提取的第一项之后打印。
您的第一行应该是(下一行相同)

Boston Logan International (BOS) | New York John F Kennedy (JFK) | 1200 | 10.11.2013 | 

没有管道字符。
所以也许你的第一个列表列表包含第一个包含空格的元素

你可以试试这段代码来证明这一点

List<string> check = (List<string>)items[0];
if(check.Count > 2)
    Console.WriteLine(check[1] + check[2]);

【讨论】:

  • 我明白需要这样显示什么,但它看起来就像我显示的那样,我什至没有猜到问题是什么。我尝试插入代码,但是输出是一样的
  • 我建议你使用调试器并在内部循环的init处设置一个断点。当您的代码到达断点时,您可以轻松地逐步继续并检查第一个列表的第一项中包含的值
  • 非常感谢。原来items List的第一个元素是空的,因为它有所有的问题。调试器很酷的东西:)
【解决方案2】:

看看这一行:

| Boston Logan International (BOS) | New York John F Kennedy (JFK) | 1200 | 10.11.2013 |

现在看看这段代码:

foreach (String list in (List<String>)lists)
{
    Console.Write(list + " | ");
}
Console.WriteLine();

第一个字符串是空的,因此你会显示或符号。

【讨论】:

    猜你喜欢
    • 2015-12-09
    • 2018-10-20
    • 2020-03-22
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多