无法显示对象列表

时间:2013-11-10 22:38:48

标签: c# list collections foreach console

我有一个对象列表,其中包含几个带字符串的列表。当我使用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]);

返回List的功能:

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;
    }

控制台输出:

//output using foreach


 | Boston Logan International (BOS) | New York John F Kennedy (JFK) | 1200 | 10.11.2013 | 
 | Boston Logan International (BOS) | Sacramento International (SMF) | 430 | 10.11.2013 | 
 | Cleveland Hopkins International (CLE) | Sacramento International (SMF) | 543 |1.11.2013| 
 | Beijing Capital (PEK) | New York John F Kennedy (JFK) | 2500 | 13.11.2013 | 
 | Moscow Domodedovo (DME) | Boston Logan International (BOS) | 1230 | 15.11.2013 | 
 | Washington Ronald Reagan (DCA) | Durango La Plata (DRO) | 340 | 14.11.2013 | 
 | Atlanta Hartsfield-Jackson ATL (ATL) | Washington Ronald Reagan (DCA) | 450 | 7.11.2013| 
 | Sacramento International (SMF) | Atlanta Hartsfield-Jackson ATL (ATL) | 325 | 6.11.2013|
 | New York John F Kennedy (JFK) | Beijing Capital (PEK) | 2300 | 19.11.2013 | 
 | Cleveland Hopkins International (CLE) | New York John F Kennedy (JFK) | 360 | 2.11.2013| 


//simple output


Boston Logan International (BOS)


这将显示为:

  

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

2 个答案:

答案 0 :(得分:2)

你不怎么想。看看你线上的第一个字符。它是一个管道,但是这个字符不应该在行的开头打印,而是仅在从第一个列表中提取的第一个项目之后打印。
你的第一行应该是(下一行相同)

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]);

答案 1 :(得分:1)

看看这一行:

| 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();

第一个字符串为空,因此您显示了或。