我想制作一份记录清单。下面的代码只复制记录的引用,因此更改myRecs1中的数据也会在MyRecs2中更改它。除了在循环中执行循环之外,还有一种从myRecs1获取myRecs2的完整副本的简单方法吗?
static void Main(string[] args)
{
List<MyRec> myRecs1 = new List<MyRec>()
{
new MyRec() {Id = 1, Data = "001"},
new MyRec() {Id = 2, Data = "002"},
new MyRec() {Id = 3, Data = "003"}
};
//List<MyRec> myRecs2 = myRecs1.ToList(); // does not work of course
// ugly but works
List<MyRec> myRecs2 = myRecs1.Select(rec => new MyRec()
{
Id = rec.Id,
Data = rec.Data
}).ToList();
myRecs1[2].Data = "xxx";
foreach (var rec in myRecs2)
{
Console.WriteLine(rec.Data);
}
}
public class MyRec
{
public int Id { get; set; }
public string Data { get; set; }
}
答案 0 :(得分:1)
这对你有用吗?
List<MyRec> myRecs1 = new List<MyRec>()
{
new MyRec() {Id = 1, Data = "001"},
new MyRec() {Id = 2, Data = "002"},
new MyRec() {Id = 3, Data = "003"}
};
List<MyRec> myRecs2 = JsonConvert.DeserializeObject<List<MyRec>>(
JsonConvert.SerializeObject(myRecs1));
这样,你基本上将整个循环/嵌套/数据类型处理等推迟到一个框架..你也可以去二进制,xml或其他序列化..但它们通常比JSON有更多的约束对我来说很好,很多时候。