LINQ保留不需要的数据绑定

时间:2014-09-12 08:39:20

标签: c# linq list

让我们创建一个名为 i_Changes List<List<int>>类型的变量,该变量具有以下值:

[1] = 1,2
[2] = 3,4,6
[3] = 4,8,15

此变量存储在类 myClass 中,如下所示:

Public Class myClass
{
    public DateTime selectedDate {get; set}
    public List<List<int>> i_Changes {get;set;}
}

现在我们有另一个名为 i_Holder 的类型为List<List<List<int>>>的变量,该变量应该包含i_Changes的值(这意味着在每次迭代后我都要存储来自i_Changes的确切数字以便稍后(在处理之后)我可以在网格中向用户显示它们。

我在每次迭代后做的事情,存储新变量如下:

i_Holder.Add(myClass.Select(n=>n.i_Changes).ToList();

我发现当我像这样添加项目时,它们会与原始的 i_Changes 保持绑定,这意味着在每次迭代后(当i_Changes下的值发生变化时),i_Holder下的所有值相应地改变 - &gt;这意味着我列出了具有完全相同值的n个项目,例如当前 i_Changes

我该如何解决这个问题?

另外,如果您认为List<List<List<int>>>不是一个好主意,请随时纠正我,因为这是我唯一能想到的。

谢谢

修改 我发现当我创建新的List<List<int>>并手动将每个值复制到该列表时,绑定就会丢失;但是我认为这不是最好的事情(每次迭代后创建新的List)。有没有更好的方法呢?

2 个答案:

答案 0 :(得分:2)

您正在保存对同一对象的引用列表,因此当对象发生更改时,您将看到列表中每个项目的更改。

每次都需要创建一个包含所需值的新列表,如下所示:

i_Holder.Add(myClass
    .Select(n => n.i_Changes.Select(j => new List<int>(j)).ToList()).ToList());

答案 1 :(得分:1)

在C#中,列表是通过引用传递的,所以我认为这就是你遇到这个问题的原因。为了避免这种情况,您必须在添加列表之前对其进行深层复制。

您可以阅读有关列表here

的深度克隆的信息