首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >泛型列表和值引用

泛型列表和值引用
EN

Stack Overflow用户
提问于 2015-09-30 17:36:44
回答 6查看 192关注 0票数 2

我有两个对象,我们称它们为AB和method

代码语言:javascript
复制
List<B> DoSomething(ref A a, List<B> b)
{
     List<B> newList = new List<B>();

     //
     //Doing something to ref A
     //

     foreach(var elementOfB in b.where(...))
     {
        //
        elementOfB.Name = "...";
        //
        newList.Add(elementOfB);
     }
     return newList;
}

所以,在这个方法完成之后,我原来的list b已经改变了Name字段(string)的值,但是我没有把它作为ref传递,我使用的是应该返回elemens副本的where,对吧?所以我的问题是为什么我的list b改变了它的值?

代码语言:javascript
复制
List<B> originalList = ...;
List<B> newList = DoSomething(ref a, originalList);
//now originalList have changed Name field values
EN

回答 6

Stack Overflow用户

发布于 2015-09-30 17:40:35

实际上,List<B>是对B元素的引用列表。引用列表已更改,但引用仍指向相同的对象。

如果您需要克隆对象,请查看此topic

票数 4
EN

Stack Overflow用户

发布于 2015-09-30 17:47:33

你实际上是在做浅层复制:你复制对对象的引用,而不是创建对象的克隆:

代码语言:javascript
复制
  // Shallow copy (your actual implementation):
  // NewList is not b, but it contains references to objects in b
  var NewList = b
    .Where(item => ...)
    .ToList(); 

  // Deep copy (which probably you're looking for)
  // NewList doesn't contain any reference to any objects in b 
  var NewList = b
    .Where(item => ...)
    .Select(item => item.Clone()) // You need this, proving that Clone() makes a deep copy
    .ToList(); 

如果你想克隆这些项目,你必须为B类正确地实现ICloneable接口(以确保深度复制)

票数 2
EN

Stack Overflow用户

发布于 2015-09-30 17:57:48

为什么我的列表b改变了它的值?

因为尽管您分配了一个新列表,但它们现在仍然将指向相同的 B 实例。在将新实例添加到新列表之前,您尚未创建新实例。

如何克隆现有对象的一个示例是通过复制构造函数

代码语言:javascript
复制
public class B
{
    public string Name { get; }
    public B(B other)
    {
        Name = other.name;
    }
}

现在,当您想要创建列表时,您需要执行以下操作:

代码语言:javascript
复制
foreach(var elementOfB in b.Where(SomePredicate))
{
    elementOfB.Name = "...";
    newList.Add(new B(elementOfB));
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32862743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档