我正在尝试打印各种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
请有人告诉我为什么?
答案 0 :(得分:5)
转换为nodeList
的字符串只会调用nodeList.ToString()
,从而产生您看到的输出。相反,您必须迭代数组并打印每个单独的项目。
或者,您可以使用string.Join
:
Console.WriteLine("The nodes of MDG are:" + string.Join(",", nodeList));
顺便说一下,如果您没有将遗留代码切换到ArrayList
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。
谢谢大家的帮助