2012-04-03 310 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 

構造函數是很好,因爲它排序瞞着我有一個錯誤爲什麼ArrayList不能正確打印?

的第一個元素是一個字符串,另一個是整數。它應該沒問題,但由於某些原因無法正確打印。

+4

爲什麼你使用'ArrayList'和'for'循環就像是2002? – jason 2012-04-03 18:26:02

+0

你是否認真地問過它將'Type'轉換爲'String'的原因?在問問題之前請做更多的研究。 – 2012-04-03 18:44:27

回答

1

您可以通過在您的Continent課程中覆蓋ToString()來獲得您正在查找的行爲。

Console.WriteLine通過在每個對象上調用ToString方法將對象轉換爲字符串。 Object.ToString()返回對象類型的名稱。你沒有重寫你的類型的方法,所以ToString返回類的名字。

7

您正在打印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 
} 
6

你告訴它打印對象c[i],這就要求c[i].ToString(),這rturns類型的名稱。

該語言沒有深入瞭解您希望打印的對象的哪些成員。因此,如果您想打印(例如)該大陸的名稱,則需要將其傳遞至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 
0

因爲每個元素的類型是大陸的,你需要打印出來前投:

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

這不是ArrayList的問題,它的問題與大陸班。以下是協議:無論何時您嘗試打印對象,CLR都會調用該對象的ToString()方法,以獲得用戶友好的可視化表示。

要顯示你的大洲更好,你必須去大陸類,並添加以下行:

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

因爲你的ArrayList包含型大陸的對象。通過執行Console.WriteLine(「{0}」,c [i]);

您正在打印整個Continent對象。我不知道你的Continent對象的字段。但是,如果您想打印出字符串值,則應該打印出該字段。例如,如果你的類看起來像這樣

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

那麼你應該做的 控制檯。WriteLine(「{0}」,c [i] .getContinent());