class ListTest { public static void Test() { #region 值類型 var oListVal = new List<int>() { 1,2,3,4 }; var nListVal = oListVal.Where(p => p > 2).ToList(); //由於T 是 值類型的( int類型),所以新列表的元素與舊列表的元素各自被分配一個內存地址(棧內存) //更改新列表的元素,不影響舊列表元素 nListVal[0] = 5; if (oListVal[2] == nListVal[0]) { Console.WriteLine("值類型--已更改原始值"); } else { Console.WriteLine("值類型--未更改原始值"); } #endregion #region 引用類型 var oListRef = new List<Student>() { new Student() { Id=1, Name = "A" }, new Student() { Id=2, Name = "B" }, new Student() { Id=3, Name = "C" }, new Student() { Id=4, Name = "D" }, }; var nListRef = oListRef.Where(p => p.Id > 2).ToList(); //由於T 是 引用類型的( Class類型),所以新列表的元素與舊列表的元素共用一個內存地址(堆內存) //更改新列表的元素,實際上也修改了舊列表元素 nListRef[0].Name = "G"; if (oListRef[2].Name == nListRef[0].Name) { Console.WriteLine("引用類型--已更改原始值"); } else { Console.WriteLine("引用類型--未更改原始值"); } #endregion } class Student { public int Id { get; set; } public string Name { get; set; } } }