C#复制实例并修改新实例,而以前的实例没有改变
本文关键字:实例 改变 复制 修改 新实例 | 更新日期: 2023-09-27 18:21:35
我在基于现有实例创建对象的新实例时遇到了这样的问题。
为了更好地解释我想做什么——想象一下我有一个实例要传递给函数,我想将这个现有实例的内容复制到另一个实例,并向这个新实例添加更多内容(但重要的是,第一个实例根本不会更改)。
因此,第一个实例被"冻结",新实例被克隆和修改。
我所做的是模型:
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 = new List<SingleMove>(currentScenario.listOfMoves.Select(x => (SingleMove)x.Clone()));
编辑:
您必须在SingleMove对象中实现IClonable