Как клонировать LinkedList поля в List-e

Рейтинг: 0Ответов: 1Опубликовано: 03.07.2023

Есть List<Clone> Clones в котором лежат Clone с полями LinkedList<string> LearnedProgramm и LinkedList<string> CancelledProgramm надо одного клона копировать в другого при этом они должны изменяться отдельно.

public void Clone(int cloneNumber)
    {
        Clone newClone = new();

        foreach (var learnedProgramm in Clones[cloneNumber].LearnedProgramm)
        {
            newClone.LearnedProgramm.AddLast(learnedProgramm);
        }

        foreach (var cancelledProgramm in Clones[cloneNumber].CancelledProgramm)
        {
            newClone.CancelledProgramm.AddLast(cancelledProgramm);
        }


        Clones.Add(newClone);
    }

Выше - пример рабочего кода, но при использовании foreach очень сильно падает скоростью. Как это сделать без понятия. Если делать через простое присвоение, то при изменении одного клона меняется и другой

Ответы

▲ 0

Конструктор класса позволит при создании нового объекта присвоить ему значения полей, если передашь ему значения "клона":

public class Clone
{
    private LinkedList<string> LearnedProgramm;
    private LinkedList<string> CancelledProgramm;

    public Clone(LinkedList<string> LearnedProgramm, LinkedList<string> LearnedProgramm)
    {
        this.LearnedProgramm = new LinkedList<string>(LearnedProgramm);
        this.LearnedProgramm = new LinkedList<string>(CancelledProgramm);

    }
    
    public void Clone(int cloneNumber)
    {
        Clone newClone = new (Clones[cloneNumber].LearnedProgramm,Clones[cloneNumber].CancelledProgramm);
        Clones.Add(newClone);
    }
}