为什么ArrayList没有正确打印?

时间:2012-04-03 18:22:42

标签: c# arraylist tostring

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

构造函数很好,因为它排序而不告诉我有错误

第一个元素是一个字符串,另一个是整数。它应该没问题,但由于某种原因它无法正确打印。

6 个答案:

答案 0 :(得分:7)

您正在打印Continent对象,而不是它们各自的部件。您可以将循环更改为:

for (int i=0; i<c.Count; i++)
{
Console.WriteLine("{0}", c[i].name); // Or whatever attributes it has
}

或者您可以在“Continent”对象中添加“ToString”功能以正确打印出来。

这看起来像(在Continent对象中):

public override string ToString()
{
return "Continent: " + attribute; // Again, change "attribute" to whatever the Continent's object has
}

答案 1 :(得分:6)

您告诉它在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 。更喜欢强类型泛型集合,即

{{1}}

答案 2 :(得分:1)

您可以通过覆盖ToString()课程中的Continent来获取您正在寻找的行为。

Console.WriteLine通过在每个对象上调用ToString方法将对象转换为字符串。 Object.ToString()返回对象类型的名称。您没有覆盖类型中的方法,因此ToString返回类的名称。

答案 3 :(得分:1)

这不是ArrayList问题,而是Continent类的问题。这是交易:每当你尝试打印一个对象时,CLR就会调用该对象的ToString()方法来获得它的用户友好的可视化表示。

为了更好地展示您的大陆,您必须转到Continent类并添加以下行:

public override string ToString()
{
    return Name;
}

答案 4 :(得分:0)

因为每个元素都是Continent类型,所以在打印之前需要进行强制转换:

Console.WriteLine("{0}",((Continent)c[i]).YourProperty);

答案 5 :(得分:0)

由于您的arraylist包含Continent类型的对象。通过执行Console.WriteLine(“{0}”,c [i]);

您正在打印整个Continent对象。我不知道你的Continent对象的字段。但是如果要打印出字符串值,则应该打印出该字段。例如,如果您的班级看起来像这样

Class Continent { private String continentName; public getContinent() { return continentName; } }

然后你应该这样做 Console.WriteLine(“{0}”,c [i] .getContinent());