所以我今天發現,當用C#中的變量賦值時,結構和類的行爲是不同的。這是我的理解,當我將一個結構賦值給一個變量,變量存儲該結構的一個副本,並且當我將一個類分配給一個變量時,該變量存儲對該類實例的引用。C#與struct中的列表混淆(值類型與引用類型)
在這種情況下,dad2包含dad1的副本,所以不應該對dad2做任何事情而不會影響dad1?顯然不是這樣的,因爲當我給爸爸添加一個兒子時,它也爲爸爸添加了同一個兒子。
public struct Dad {
public string name;
public List <Son> sons;
public struct Son {
public string name;
public Son (string n) {
name = n;
}
}
}
static void Main (string [] args) {
Dad dad1 = new Dad();
dad1.name = "Bob";
dad1.sons = new List <Dad.Son> {new Dad.Son ("A")};
Dad dad2 = dad1;
Debug.WriteLine (dad2.Equals (dad1) + " " + dad1.sons.Count() + " " + dad2.sons.Count());
//true 1 1
dad2.sons.Add (new Dad.Son ("B"));
Debug.WriteLine (dad2.Equals (dad1) + " " + dad1.sons.Count() + " " + dad2.sons.Count());
//true 2 2
}
我明白了,所以在宣佈dad2之後,我必須重新聲明其List並從dad1的List中複製元素。 – TreeTree