Console.WriteLine(ArrayList)输出错误

时间:2012-05-16 18:56:08

标签: c# arraylist console.writeline

我正在尝试打印各种foreach循环的ArrayList的内容,但我唯一得到的是String + System.Collections.ArrayList。

例如以下代码:

ArrayList nodeList = new ArrayList();
foreach (EA.Element element in elementsCol)
{
    if ((element.Type == "Class") || (element.Type == "Component") || (element.Type == "Package"))
    {
         nodeList.Add(element);
    }
    Console.WriteLine("The nodes of MDG are:" + nodeList); //stampato a schermo la lista dei nodi nel MDG finale

我得到的输出是:

The nodes of MDG are:System.Collections.ArrayList

请有人告诉我为什么?

6 个答案:

答案 0 :(得分:5)

转换为nodeList的字符串只会调用nodeList.ToString(),从而产生您看到的输出。相反,您必须迭代数组并打印每个单独的项目。

或者,您可以使用string.Join

Console.WriteLine("The nodes of MDG are:" + string.Join(",", nodeList));

顺便说一下,如果您没有将遗留代码切换到ArrayList

,那么在C#2及更高版本中仍然没有理由(或借口)继续使用List<T>

答案 1 :(得分:5)

首先,没有充分的理由在C#中使用ArrayList。您应该至少使用System.Collections.Generic.List<T>,即使在这里,它们也可能是更具体的数据结构。 从不使用类似ArrayList的无类型集合。

其次,当您将对象传递给Console.Writeline()时,它只调用该对象的.ToString()方法。

ArrayList不会覆盖从基础对象类型继承的.ToString()方法。

基本对象类型上的.ToString()实现只是打印出对象的类型。因此,您发布的行为正是预期的行为。

我不知道选择不为数组和其他序列类型重写.ToString()的原因,但简单的事实是,如果你想要打印出数组中的各个项目,你必须写用于迭代项目并自行打印的代码。

答案 2 :(得分:0)

你必须遍历arraylist才能获得它的价值......

foreach(var item in nodeList)
{
    Console.WriteLine("The nodes of MDG are:" + item);
}

这将有效..

更新:

使用element而不是nodelist

Console.WriteLine("The nodes of MDG are:" + element);

答案 3 :(得分:0)

StringBuilder builder = new StringBuilder();
foreach (EA.Element element in elementsCol)
{
    if ((element.Type == "Class") || (element.Type == "Component") || (element.Type == "Package"))
    {
        builder.AppendLine(element.ToString());

    }
 }
 Console.WriteLine("The nodes of MDG are:" + builder.ToString());

答案 4 :(得分:0)

这将调用nodeList.ToString()。在列表中的每个元素上运行ToString()并将它们连接在一起更有意义:

Console.WriteLine("The nodes of MDG are:" + string.Join(", ", nodeList));

答案 5 :(得分:0)

我使用以下代码获得了我想要的输出:

using System.IO

using (StreamWriter writer = new StreamWriter("C:\\out.txt"))
        {
            Console.SetOut(writer);
         }

Console.WriteLine("the components are:");
        foreach (String compName in componentsList)
        { Console.WriteLine(compName); }

其中componentsList是我想要打印的arraylist。

谢谢大家的帮助