2010-12-08 37 views
0
List<A> list = new List<A>(); 
A a = new A(); 
A.name = "name1"; 
list.Add(a); 
a = new A(); 
a.name = "name2"; 
list.Add(a); 

該列表是否最終包含名稱等於「name2」的兩個相同的A?以下是否正確?

如何利用一個變量來實現這一點?

+0

你大概的意思`A =新的A();`的`,而不是一個新=(A);`。這也許正是你在你的原始代碼中缺少列表中的兩個不同的實例。 – 2010-12-08 10:40:01

回答

4

該列表將包含A型的兩個不同實例;一個名稱設置爲「name1」,另一個設置爲「name2」。

+0

這是正確的。 – 2010-12-08 10:39:10

1

你有一些語法錯誤,應該是:

List<A> list = new List<A>(); 
A a = new A(); 
a.name = "name1"; 
list.Add(a); 
a = new A(); 
a.name = "name2"; 
list.Add(a); 

...但是這將導致2個與列表中不同名稱的元素。

爲什麼?井a變量指向一個新的A實例,該引用被添加到列表中,然後a指向一個參考新A創建第二次,則是參考被添加到列表中.. 。最後,列表最後會以2個不同的對象引用結尾 - 不同的A實例,每個實例都有自己的name

+1

什麼是`list.Dump();`? – 2010-12-08 10:43:13

0

您是否嘗試過使用Hashset(T)?你需要爲你的類創建一個IComparer,但是它應該只在兩個對象相等時添加一個。

MSDN Hashset