Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ保留不需要的数据绑定_C#_Linq_List - Fatal编程技术网

C# LINQ保留不需要的数据绑定

C# LINQ保留不需要的数据绑定,c#,linq,list,C#,Linq,List,让我们创建一个名为i_Changes的List类型的变量,该变量具有以下值: [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.Add(myClass

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

[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.Add(myClass
    .Select(n => n.i_Changes.Select(j => new List<int>(j)).ToList()).ToList());
我发现,当我像这样向列表中添加项目时,它们与原始的I\u更改保持绑定,这意味着在每次迭代之后(当I\u下的值更改时),i_Holder下的所有值都会相应地改变->这意味着我有n个值完全相同的项的列表,例如currenti_Changes

我怎样才能解决这个问题

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

多谢各位

编辑:
我发现,当我创建新的
列表
并手动将每个值复制到该列表时,绑定就会丢失;然而,我认为这不是最好的做法(在每次迭代后创建新列表)。有更好的方法吗?

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

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

Public Class myClass
{
    public DateTime selectedDate {get; set}
    public List<List<int>> i_Changes {get;set;}
}
i_Holder.Add(myClass
    .Select(n => n.i_Changes.Select(j => new List<int>(j)).ToList()).ToList());
i_Holder.Add(myClass
.Select(n=>n.i_更改)Select(j=>newlist(j)).ToList().ToList());
在C#中,列表是通过引用传递的,因此我认为这就是您收到此问题的原因。为了避免这种情况,您必须在添加列表之前对列表进行深度复制


您可以阅读有关列表深度克隆的信息

请为您的问题共享更多代码。执行此操作的代码超过600行。迭代结束时,我会这样做(向列表中添加新值),因此对于
I\u Holder
,实际上没有其他相关的代码,我建议您使用
list
。和
i_Holder=i_Holder.Contact(myClass.SelectMany(n=>n.i_Changes.ToList())联系人代表什么?我在LINQ命令中找不到它;如果我没有弄错的话,还可以选择许多简单地将结果放在1D数组中;但是我需要保留数组的结构您的示例代码非常奇怪:
I_Holder.Add(myClass.Select(n=>n.I_Changes.ToList())
首先它不编译,其次如果
myClass
myClass
的一个实例,你不能对它执行
Select
操作:这不是一个
IEnumerable
操作,谢谢!但是你认为每次都创建新列表是一个好的做法吗?我应该为这个pu创建一些不同的东西吗rpose?或应用不同的方法?嗯..无论怎样做,您都需要复制所有
int
值,因此使用新的
列表
可能并不比任何其他方法更糟糕!