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
请有人告诉我为什么?
转换为的字符串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>
首先,没有充分的理由在C#中使用ArrayList.您至少应该使用它System.Collections.Generic.List<T>,即使在这里它们也可能是更具体的数据结构.永远不要使用像ArrayList这样的无类型集合.
其次,当您将对象传递给Console.Writeline()时,它只调用该对象的.ToString()方法.
ArrayList不会覆盖从基础对象类型继承的.ToString()方法.
基本对象类型上的.ToString()实现只是打印出对象的类型.因此,您发布的行为正是预期的行为.
我不知道选择不要为数组和其他序列类型重写.ToString()的原因,但简单的事实是,如果你想要打印出数组中的各个项,你必须编写代码迭代项目并自己打印.