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; } } }