设为首页 加入收藏

TOP

使用List的Remove方法时想起的小问题
2015-11-21 02:03:55 来源: 作者: 【 】 浏览:5
Tags:使用 List Remove 方法 想起 问题

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

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
}
List
  
    listA = new List
   
    (); 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
  
    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);
}
得到下图所示结果。

\ <??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+yrnTw1JlbW92Zbe9t6jSxrP9bGlzdEHW0LXEtdrSu7j2us3X7rrz0ru49tSqy9ihozwvcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:java;">listB.Remove(listA.First()); listB.Remove(listA.Last());再次遍历listA,listB中所有元素进行输出(具体代码省略),得到下图所示结果。

\

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

\

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

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

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

\

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

\

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

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

\

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

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

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

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

\

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

\

接着,为listC增加新元素。

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

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

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

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

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Effective C++:条款21:必须返回.. 下一篇再议指针---------函数回调(qsor..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: