如何获取对象的副本

时间:2018-05-05 10:33:23

标签: c# object

我有一个列表,类似于“List< Block>”。 我想要的是获得一个与列表中的块相同的块,而不是列表中的对象。并且使用块修改圆顶并获得另一个。

但问题是,在获取块三次(列表的长度为3)之后,第四个块已被修改。我尝试了所有我知道的方法,甚至使用“new”,它只是获取列表中的对象,而不是同一个。

那么如何解决这个问题?

以下是我的一些代码:

a=[[a,b,c],3]

1 个答案:

答案 0 :(得分:0)

修改

OP错误地将uWSGI==2.0.17 Flask==0.12.2 的新实例误认为是从Block中撤出的实例,因为List<Block>未在复制构造函数中克隆,而是简单地分配,因此导致两个唯一的实例List<Rectangle>引用相同的Block

在这种情况下,正确的拷贝构造函数是:

List<Rectangle>

这需要在public Block(Block originalBlock) { this._block = new List<Rectangle>(originalBlock.block); this._blockNum = originalBlock.blockNum; } 类中使用类似的复制构造函数。

这应该适合你:

Rectangle

用法:

public class Block
{
    private List<Rectangle> _block;
    public List<Rectangle> block
    {
        get { return _block; }
    }

    private int _blockNum;
    public int blockNum
    {
        get { return _blockNum; }
    }

    // Copy constructor
    public Block(Block originalBlock)
    {
        // IMPORTANT: This does not create a new List<Rectangle>! See EDIT
        this._block = originalBlock.block;

        this._blockNum = originalBlock.blockNum;
    }
}

阅读How to: Write a Copy Constructor (C# Programming Guide) | Microsoft Docs