Console.WriteLine(ArrayList)输出错误

Def*_*efi 1 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
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

The nodes of MDG are:System.Collections.ArrayList

请有人告诉我为什么?

Bro*_*ass 5

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

另外,您可以使用string.Join

Console.WriteLine("The nodes of MDG are:" + string.Join(",", nodeList));
Run Code Online (Sandbox Code Playgroud)

顺便说一句,没有理由(或借口)仍然可以ArrayList在C#2及更高版本中使用-如果您不维护旧代码,请切换到List<T>


Joe*_*orn 5

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

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

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

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

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