Console.WriteLine(ArrayList) 错误的输出

本文关键字:错误 输出 ArrayList WriteLine Console | 更新日期: 2023-09-27 18:34:28

>我正在尝试打印各种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

有人可以告诉我为什么吗?

Console.WriteLine(ArrayList) 错误的输出

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

或者,您可以使用string.Join

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

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

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

其次,当你将一个对象传递给 Console.Writeline(( 时,它只是调用 .对象的 ToString(( 方法。

数组列表不会覆盖 .从基对象类型继承的 ToString(( 方法。

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

我不知道选择不覆盖背后的原因.ToString(( 用于数组和其他序列类型,但简单的事实是,如果您希望它打印出数组中的各个项目,则必须编写代码以迭代这些项目并自己打印它们。

你必须遍历数组列表才能得到它的值......

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

这将起作用..

更新:

使用元素代替节点列表

Console.WriteLine("The nodes of MDG are:" + element);
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());

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

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

我通过以下代码得到了我想要的输出:

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

其中组件列表是我想打印的数组列表。

谢谢大家的帮助

您可以使用 string.join,同时通过执行以下操作将 ArrayList 复制到新的常规数组:

Console.WriteLine(string.Join(", ", nodeList.ToArray()));