2012-04-03 11 views
2
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 

Der Konstruktor ist in Ordnung, weil es ohne mich zu sagen sortiert es ein FehlerWarum wird ArrayList nicht richtig gedruckt?

das erste Element ist eine Zeichenkette, die andere eine ganze Zahl ist. Es sollte in Ordnung sein, aber es wird aus irgendeinem Grund nicht richtig gedruckt.

+4

Warum verwenden Sie 'ArrayList' und' for' Loops wie es 2002 ist? – jason

+0

Fragen Sie ernsthaft nach dem Grund, warum Sie Ihren 'Type' in einen' String' umwandeln? Bitte machen Sie mehr Forschung, bevor Sie eine Frage stellen. –

Antwort

1

Sie können das gewünschte Verhalten erhalten, indem Sie ToString() in Ihrer Continent Klasse überschreiben.

Console.WriteLine konvertiert Objekte in Zeichenfolgen, indem die Methode ToString für jedes Objekt aufgerufen wird. Object.ToString() gibt den Namen des Objekttyps zurück. Sie haben die Methode in Ihrem Typ nicht überschrieben, daher gibt ToString den Namen der Klasse zurück.

7

Sie drucken Continent-Objekte, nicht ihre einzelnen Teile.

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

Oder Sie können eine „ToString“ Funktion in „Kontinent“ Objekt hinzufügen, richtig es auszudrucken: Sie können entweder Ihre Schleife ändern.

Dies würde so aussehen (im Kontinent-Objekt):

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

Sie es doch sagen, das Objekt bei c[i] zu drucken, die c[i].ToString() aufruft, die den Namen des Typs Rturns.

Die Sprache hat keinen Einblick, welche Elemente dieses Objekts Sie tatsächlich drucken möchten. Wenn Sie also beispielsweise den Namen des Kontinents drucken möchten, müssen Sie diesen an übergeben. Das oder Sie können ToString für Ihren Typ überschreiben, um eine aussagekräftigere Zeichenfolge zurückzugeben.

Nebenbei bemerkt gibt es fast keine guten Gründe mehr, ein ArrayList mehr zu verwenden. Bevorzugen Sie eine stark typisierte generische Sammlung statt, dh

var list = new List<Continent>(); 
list.Add(new Continent("", whatever)); // ok 
list.Add(1); // fails! The ArrayList would allow it however 
0

Da jedes Element vom Typ Kontinent ist, müssen Sie, bevor Sie werfen sie auszudrucken:

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

Es ist nicht das Arraylist Problem, es ist das Problem mit der Kontinentklasse. Hier ist der Deal: Wann immer Sie versuchen, ein Objekt zu drucken, ruft CLR die ToString() - Methode des Objekts auf, um eine benutzerfreundliche visuelle Darstellung zu erhalten.

Ihre Kontinente Um zu zeigen, besser, müssen Sie zu Kontinent Klasse gehen und folgende Zeilen hinzufügen:

public override string ToString() 
{ 
    return Name; 
} 
0

Da Ihre Arraylist Objekte vom Typ Kontinent enthält. Mit Console.WriteLine ("{0}", c [i]);

Sie drucken ein komplettes Continent-Objekt. Ich kenne die Felder deines Continent-Objekts nicht. Wenn Sie jedoch den Zeichenfolgenwert ausdrucken möchten, sollten Sie stattdessen dieses Feld ausdrucken. Zum Beispiel, wenn Ihre Klasse sieht wie folgt aus

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

Dann sollten Sie Console tun.WriteLine ("{0}", c [i] .getContinent());

Verwandte Themen