C#复制实例并修改新的,而前一个是不变的

时间:2015-11-11 15:57:00

标签: c# oop object instance

基于现有实例创建对象的新实例时遇到了这样的问题。

更好地解释我想做什么 - 想象一下 我有一个实例,我将其传递给函数,我想将此现有实例的内容复制到另一个实例,并向此新实例添加更多内容(但重要的是第一个实例根本不会更改)

所以第一个例子被冻结了#39;新的克隆和修改。

我所做的是模型:

public class Scenario
{
    public List<SingleMove> listOfMoves { get; set; }
    public List<int> listOfScores { get; set; }
    public int totalScore { get; set; }

    public Scenario(Scenario currentScenario)
    {
        listOfMoves = currentScenario.listOfMoves;
        listOfScores = currentScenario.listOfScores;
        totalScore = currentScenario.totalScore;
    }
...

现在是处理这些对象的函数

    static public void ActivitiesForMoveWhites(Scenario currentScenario, int positionTo, int positionFrom)
    {
        Scenario singleScenario = new Scenario(currentScenario);

        SingleMove singleMove = new SingleMove();
        singleMove.checker = Configuration.chessfield[positionFrom];
        singleMove.positionFrom = Logic.TranslateNumberOfFieldToString(positionFrom); //tutaj moze przechowywac to jako position czyli w intcie ?
        singleMove.positionTo = Logic.TranslateNumberOfFieldToString(positionTo); //tutaj moze przechowywac to jako position czyli w intcie ?
        singleScenario.listOfMoves.Add(singleMove);

        Configuration.listOfScenarios.Add(singleScenario);
        //Configuration.listOfScenarios.Add(new Scenario(singleScenario));
...

问题是所有不同的场景都有相同的listOfMoves。但它应该不是这样的。当前场景应该复制先前的场景内容,添加内容,并且复制内容的场景应保持原样。所以最后我有不同listOfMoves的场景,不一样!

抱歉有点混乱的解释。如果您有任何疑问或需要更多详细信息,请询问。

编辑: 还有一个问题,但我解决了。

1 个答案:

答案 0 :(得分:0)

您还必须在场景中克隆列表,因为=不创建列表的新实例。 在构造函数中尝试这样的事情:

listOfMoves  = new List<SingleMove>(currentScenario.listOfMoves.Select(x => (SingleMove)x.Clone()));

编辑:

您必须在SingleMove对象中实现IClonable