Использование Linq ConvertAll для создания резервной копии списка перед изменением списка - PullRequest
0 голосов
/ 09 октября 2018

Я работаю над проектом, в котором у меня есть список объектов со вложенным списком, для которого я хочу сделать резервную копию, прежде чем обновлять исходный список.

Я близок, но явозникли проблемы с поиском правильного синтаксиса, поэтому я надеюсь, что вы поможете мне здесь.

Это оригинальный класс:

public class TeamClass
{
     public string Country { get; set; }
     public string CountryCode { get; set; }
     public List<double> Points { get; set; }
}

List<TeamClass> originalList = new List<TeamClass>();

Непосредственно перед обновлением точек в OriginalList, который я хочу создатьглубокая копия OriginalList, чтобы я мог «отменить» изменения.

В настоящее время я использую код ниже:

 var backupList = Simulation.ConvertAll(x => new TeamClass
 {
     Country = x.Country,
     CountryCode = x.CountryCode,
     Points = new List<double>(x.Points.ConvertAll(p => new double()))
 })
 .OrderByDescending(o => o.Points.Sum())
 .ToList();

Хотя этот код создает глубокую копию исходного списка,он заменяет все точки в списке Точки на 0 (из-за нового двойного ())

Однако использование

Points = x.Points

дает мне правильные очки, но они обновляются, когда оригиналсписок обновляется.

Я думаю, что должен сделать что-то вроде

Points = new List<double>().AddRange(x.Points)

Но я не могу найти правильный синтаксис.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 09 октября 2018

Чтобы ответить на дополнительный вопрос из комментариев.Это можно сделать с помощью чего-то подобного.

 int N = 4; // Number of desired elements with value
 var backupList = Simulation.ConvertAll(x => new TeamClass
 {
     Country = x.Country,
     CountryCode = x.CountryCode,
     Points = new List<double>(x.Points.Take(N).Concat(x.Points.Skip(N).ToList().ConvertAll(p => new double())));
 })
 .OrderByDescending(o => o.Points.Sum())
 .ToList();

Поскольку тип double не может иметь тип данных nullable, все значения после N будут преобразованы в 0.

...