2

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

请有人告诉我为什么?

4

6 回答 6

5

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

或者,您可以使用string.Join

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

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

于 2012-05-16T18:58:30.423 回答
4

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

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

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

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

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

于 2012-05-16T19:00:15.337 回答
3

你必须遍历 arraylist 来获取它的值......

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

这将工作..

更新:

使用元素而不是节点列表

Console.WriteLine("The nodes of MDG are:" + element);
于 2012-05-16T18:58:46.073 回答
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 是我想要打印的数组列表。

谢谢大家的帮助

于 2012-05-24T15:43:02.017 回答
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());
于 2012-05-16T18:58:55.400 回答
0

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

Console.WriteLine("The nodes of MDG are:" + string.Join(", ", nodeList));
于 2012-05-16T19:00:02.513 回答