基于现有实例创建对象的新实例时遇到了这样的问题。
更好地解释我想做什么 - 想象一下 我有一个实例,我将其传递给函数,我想将此现有实例的内容复制到另一个实例,并向此新实例添加更多内容(但重要的是第一个实例根本不会更改)
所以第一个例子被冻结了#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的场景,不一样!
抱歉有点混乱的解释。如果您有任何疑问或需要更多详细信息,请询问。
编辑: 还有一个问题,但我解决了。
答案 0 :(得分:0)
您还必须在场景中克隆列表,因为=不创建列表的新实例。 在构造函数中尝试这样的事情:
listOfMoves = new List<SingleMove>(currentScenario.listOfMoves.Select(x => (SingleMove)x.Clone()));
编辑:
您必须在SingleMove对象中实现IClonable