码迷,mamicode.com
首页 > 其他好文 > 详细

使用List的Remove方法时想起的小问题

时间:2014-06-16 20:37:36      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:list remove   list add   引用   

新建集合listA,包含5个元素。

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
}
List<Student> listA = new List<Student>();
listA.Add(new Student() { Id = 1, Name = "yl1" });
listA.Add(new Student() { Id = 2, Name = "yl2" });
listA.Add(new Student() { Id = 3, Name = "yl3" });
listA.Add(new Student() { Id = 4, Name = "yl4" });
listA.Add(new Student() { Id = 5, Name = "yl5" });

新建集合listB,listB的引用指向listA。

List<Student> listB = listA;

遍历listA,listB中所有元素进行输出。

foreach (Student i in listA)
{
    Console.WriteLine("listA:" + i.Id.ToString() + ";" + i.Name);
}
foreach (Student j in listB)
{
    Console.WriteLine("listB:" + j.Id.ToString() + ";" + j.Name);
}
得到下图所示结果。

bubuko.com,布布扣 

使用Remove方法移除listA中的第一个和最后一个元素。

listB.Remove(listA.First());
listB.Remove(listA.Last());
再次遍历listA,listB中所有元素进行输出(具体代码省略),得到下图所示结果。

bubuko.com,布布扣 

从图中结果可以看出:在对listA执行Remove方法前后,listA与ListB中所包含的元素完全一致。这是因为listA与listB指向的是同一个集合,所以对listA执行Remove方法移除其中元素的同时,集合ListB中的元素同样会被移除。(具体见下面所给示意图)

bubuko.com,布布扣

接着,我们为集合listB增加一个新的元素。

listB.Add(new Student() { Id = 6, Name = "yl6" });

再次遍历listA,listB中所有元素进行输出(具体代码省略),得到下图所示结果。

bubuko.com,布布扣 

从图中可以看出,listB中增加的新元素同样存在于listA中,进一步说明,listAlistB指向的为同一个集合(具体见下面所给示意图)。

bubuko.com,布布扣 

 

接下来,新建集合listC,同时遍历集合listA中,将其元素一一添加进集合listC

List<Student> listC = new List<Student>();
foreach (Student i in listA)
{
     listC.Add(i);
}
遍历listA,listC中所有元素进行输出。执行代码,得到下图所示结果。

bubuko.com,布布扣 

由结果可以看出,此时listAlistB中所含元素一致。

接着,使用Remove方法移除listC中的第一个和最后一个元素。

listC.Remove(listA.First());
listC.Remove(listA.Last());

再次遍历listA,listC中所有元素进行输出,得到下图所示结果。

bubuko.com,布布扣 

由结果可知,listC中的第一个和最后一个元素被移除,而listA中的元素保持不变。这是因为遍历listA并将其元素一一添加进listC的本质是将指向listA中各元素的引用一一添加进了集合listC,而对listC执行Remove方法时移除的是指向集合A中元素的引用,不会影响到集合listA中所包含的元素(具体见下面示意图所示)。

bubuko.com,布布扣 

接着,为listC增加新元素。

listC.Add(new Student() { Id = 6, Name = "yl6" });

遍历listAlistC输出其元素,得到下图所示结果。

bubuko.com,布布扣 

从结果可知,listC增加了新元素,而listA中的元素保持不变。至于原因这里就不做过多解释了。

总之,我们将一个集合中的元素“克隆”至另一个集合时,一定要清楚,这两个集合之间是否存在什么样的关系,不然可能会出现一些不必要的错误。

使用List的Remove方法时想起的小问题,布布扣,bubuko.com

使用List的Remove方法时想起的小问题

标签:list remove   list add   引用   

原文地址:http://blog.csdn.net/yl2isoft/article/details/31034829

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!