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
有人可以告诉我为什么吗?
转换为字符串 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()));