为什么 ArrayList 无法正确打印
本文关键字:打印 ArrayList 为什么 | 更新日期: 2023-09-27 18:30:05
ArrayList c = new ArrayList();
c.Add(new Continent("Africa", af));
c.Add(new Continent("America", am));
c.Add(new Continent("Asia", a));
c.Add(new Continent("Oceania", oc));
c.Add(new Continent("Europe", eu));
c.Sort();
for (int i = 0; i < c.Count; i++)
{
Console.WriteLine("{0}", c[i]);
}
output:
TP.Continent
TP.Continent
TP.Continent
TP.Continent
TP.Continent
构造函数很好,因为它在不告诉我有错误的情况下排序
第一个元素是字符串,另一个是整数。它应该没问题,但由于某种原因无法正确打印。
您正在打印大陆对象,而不是其各个部分。 您可以将循环更改为:
for (int i=0; i<c.Count; i++)
{
Console.WriteLine("{0}", c[i].name); // Or whatever attributes it has
}
或者您可以在"大陆"对象中添加"ToString"函数以正确打印出来。
这看起来像(在大陆对象内部(:
public override string ToString()
{
return "Continent: " + attribute; // Again, change "attribute" to whatever the Continent's object has
}
你告诉它在 c[i]
处打印对象,这会调用 c[i].ToString()
,这会转换类型的名称。
该语言无法深入了解您实际要打印此对象的哪些成员。 因此,如果要打印(例如(大陆的名称,则需要将其传递给Console.WriteLine
。 或者,您可以重写类型ToString
以返回更有意义的字符串。
附带说明一下,几乎没有充分的理由再使用ArrayList
了。 更喜欢强类型的泛型集合,即
var list = new List<Continent>();
list.Add(new Continent("", whatever)); // ok
list.Add(1); // fails! The ArrayList would allow it however
覆盖Continent
类中的ToString()
来获得所需的行为。
Console.WriteLine
通过对每个对象调用 ToString
方法将对象转换为字符串。 Object.ToString()
返回对象类型的名称。 您尚未重写类型中的方法,因此 ToString 将返回类的名称。
这不是 ArrayList 的问题,而是 Continent 类的问题。交易是这样的:每当您尝试打印对象时,CLR 都会调用该对象 ToString(( 方法来获得用户友好的可视化表示形式。
为了更好地展示您的大陆,您必须转到大陆类并添加以下行:
public override string ToString()
{
return Name;
}
由于每个元素的类型都是 Continent,因此您需要在打印它们之前进行强制转换:
Console.WriteLine("{0}",((Continent)c[i]).YourProperty);
因为您的数组列表包含大陆类型的对象。通过做 Console.WriteLine("{0}", c[i](;
您正在打印整个大陆对象。我不知道你的大陆对象的字段。但是,如果要打印出字符串值,则应打印出该字段。例如,如果您的类看起来像这样
Class Continent
{
private String continentName;
public getContinent()
{
return continentName;
}
}
那你应该做Console.WriteLine("{0}", c[i].getContinent(((;