在更改列表之前,先使用Linq ConvertAll创建列表的备份

时间:2018-10-09 05:00:58

标签: c# linq convertall

我正在一个项目中,在该项目中,我有一个对象列表和一个嵌套列表,在更新原始列表之前,我想对其进行备份。

我已经接近了,但是我找不到正确的语法,所以希望您能在这里为我提供帮助。

这是原始课程:

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(由于新的double())将列表中的所有点替换为点

但是使用

Points = x.Points

为我提供了正确的要点,但是当原始列表更新时它们也会更新。

我认为我必须做

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

但是我找不到正确的语法。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

要从评论中回答其他问题。可以用这样的东西来完成。

 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不能为空,因此N之后的所有值都将转换为0。