C# List多次Add資料時可能只會有最後一筆資訊重複出現

C# 記憶體位址陷阱 

//格式
public class testAddClass      
{
	public string id { get; set; } 	//Id
	public string name { get; set; } //名稱
}

//預設值,手動先塞兩筆資料
List<testAddClass> testData = new List<testAddClass>();
testData.Add(new testAddClass() { id = "1" ,name = "A" });
testData.Add(new testAddClass() { id = "2" ,name = "B" });


//範例開始(錯誤)
List<testAddClass> ListDeta = new List<testAddClass>(); //最後存容器
testAddClass Deta = new testAddClass(); //臨時使用容器
foreach (var p in testData)
{
	Deta.id =  "Id=" + p.id;
	Deta.name = "Name=" + p.name; 
	ListDeta.Add(Deta);
}
//執行結果
/*
ListDeta[0].id => "Id=2"
ListDeta[0].name => "Name=B"
ListDeta[1].id => "Id=2"
ListDeta[1].name => "Name=B"
疑是Add資料時,為先暫存記憶體位置,做多次Add時候相憶體位置同記,故資料只有最後一筆多次新增
*/


//範例開始(更正)
List<testAddClass> ListDeta = new List<testAddClass>();	//最後存容器
foreach (var p in testData)
{
	//**修改程式位置--開始--**
	testAddClass Deta = new testAddClass(); //臨時使用容器
	//**修改程式位置--結束--**
	Deta.id =  "Id=" + p.id;
	Deta.name = "Name=" + p.name; 
	ListDeta.Add(Deta);
}
//執行結果
/*
ListDeta[0].id => "Id=1"
ListDeta[0].name => "Name=A"
ListDeta[1].id => "Id=2"
ListDeta[1].name => "Name=B"
將容器再回圈內建立,每次都有新的記憶體,故不會有覆蓋的問題
*/

 

我只是一棵樹