2016-03-08 52 views
0
MyData data = new MyData { MyInt = 1, MyString = "Smith" }; 
MyData data1 = new MyData { MyInt = 3, MyString = "Wesson" }; 
MyData data2 = new MyData { MyInt = 2, MyString = "Colt" }; 
List<MyData> lst = new List<MyData>(); 
lst.Add(data); 
lst.Add(data1); 
lst.Add(data2); 

Console.WriteLine("\nBefore sort:"); 
foreach (MyData MyInt in lst) 
{ 
    Console.WriteLine((MyInt)); 
    Console.WriteLine(lst.ToString()); 
} 

剛做了簡單的練習列表,但在輸出i有什麼問題。 enter image description here從類列表中打印有什麼問題?

爲什麼這樣顯示?我期望得到它的內容。兩種不同的方式給了我相同的結果。可能是我錯了列表填充?

+3

邁德特需要重寫ToString功能,並提供你正在尋找的信息。 – LarsTech

回答

1

MyInt將類型MyData的varabile - 對象MyDataMyInt屬性。 MyData類是否覆蓋ToString()?這就是Console.WriteLine將尋找時,它會嘗試寫對象 - 否則,它會使用默認的Object,這是你所看到的。

你可能想要更多的東西是這樣的:

Console.WriteLine("\nBefore sort:"); 
foreach (MyData myData in lst) 
{ 
    Console.WriteLine(myData.MyInt); 
} 

這是不是寫了MyData對象的MyInt財產。

如果你願意,你可以覆蓋ToString方法,像這樣在MyData類/結構:

public override string ToString() 
{ 
    return MyInt.ToString(); // assuming you just want to see the MyInt property... 
} 
5

默認情況下,MyData類使用的ToString()實施從System.Object繼承。該函數返回有關該類的非常通用的信息 - 幾乎只是類名,以及有關任何泛型類型參數的有限信息。

如果你想ToString()顯示不同的信息,你需要自己重寫它:

public override string ToString() 
{ 
    return String.Format("{0} {1}", MyInt, MyString); 
} 
+0

奇怪,仍然顯示相同的結果。如何正確我應該寫Console.WriteLine(lst.ToString()) - 那部分? – AlexanderK

+1

的'lst'變量的類型的列表'',其中相同的'MyData'繼承其'的ToString()''從Object'。 'List '不會使用'MyData'中的'ToString()',因爲它不是'MyData'。 – Amy

+0

那麼,我應該放置在其他地方,或重新宣佈先前? – AlexanderK

0

如果你想輸出的每個邁德特對象,那麼你就需要通過覆蓋實現自己的ToString方法這是你在上面看到的結果的默認值(僅顯示對象引用)。你也應該調用你的變量。不要在for循環中使用MyInt。稱之爲像數據一樣明智。不要用我的前綴來添加你的類。糟糕的做法。