Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.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# 在for循环中操作列表项会影响所有其他项_C#_For Loop_Collections_Foreach - Fatal编程技术网

C# 在for循环中操作列表项会影响所有其他项

C# 在for循环中操作列表项会影响所有其他项,c#,for-loop,collections,foreach,C#,For Loop,Collections,Foreach,我遇到了一个奇怪的问题,但肯定是我这边的失误。看看你是否能指出这一点。我在foreach循环中执行此操作,但随后我切换到for循环以避免循环歧义,但仍然失败 // Update each quantum. for (int i = 0; i < Quantums.Where(a => a.Language != "en-US").Count(); i++) { Quantums[i].ListQType.AddRange(AddedOnes); } //更新每个量程。 对于

我遇到了一个奇怪的问题,但肯定是我这边的失误。看看你是否能指出这一点。我在
foreach
循环中执行此操作,但随后我切换到
for
循环以避免循环歧义,但仍然失败

// Update each quantum.
for (int i = 0; i < Quantums.Where(a => a.Language != "en-US").Count(); i++)
{
    Quantums[i].ListQType.AddRange(AddedOnes);
}
//更新每个量程。
对于(inti=0;ia.Language!=“en-US”).Count();i++)
{
Quantums[i].ListQType.AddRange(AddedOnes);
}
发生的情况是,列表
addedons
被添加到每个迭代中的所有量程,而不仅仅是我们在循环体中处理的量程。我怀疑他是一团糟。 有什么建议吗


谢谢

打电话给
Quantums[i]
是个问题。过滤后的列表将具有不同的索引,而原始列表将具有不同的索引
i
。在这里,您将使用过滤列表的索引修改原始列表

最好使用for each lambda表达式或for each循环

Quantums.Where(a => a.Language != "en-US").ForEach(x=>x.ListQType.AddRange(AddedOnes));


调用
Quantums[i]
就是问题所在。过滤后的列表将具有不同的索引,而原始列表将具有不同的索引
i
。在这里,您将使用过滤列表的索引修改原始列表

最好使用for each lambda表达式或for each循环

Quantums.Where(a => a.Language != "en-US").ForEach(x=>x.ListQType.AddRange(AddedOnes));


这可能不会导致您的问题,但您的
for
循环的条件似乎是错误的。如果要对条件执行
Where()
,则应确保在for循环中处理的列表处于相同的条件

我怀疑他是一团糟

然而,尽管如此,正如您所怀疑的,您的每个量子似乎都指向同一个对象。这可能是您创建每个对象的方式。我怀疑你在做这样的事情:

Quantum q1 = new Quantum(){Property1=something /*etc*/};
Quantum q2 = q1; // assuming your Quantums is a list of Quantum
或者它可能只是
ListQType
引用复制到
Quantums
的每个元素上


如果您正试图这样做,您应该研究或至少实例化新对象并单独复制值(如果它们是值类型,则安全)。这可能不会导致您的问题,但您的
for
循环的条件似乎是错误的。如果要对条件执行
Where()
,则应确保在for循环中处理的列表处于相同的条件

我怀疑他是一团糟

然而,尽管如此,正如您所怀疑的,您的每个量子似乎都指向同一个对象。这可能是您创建每个对象的方式。我怀疑你在做这样的事情:

Quantum q1 = new Quantum(){Property1=something /*etc*/};
Quantum q2 = q1; // assuming your Quantums is a list of Quantum
或者它可能只是
ListQType
引用复制到
Quantums
的每个元素上


如果您正试图这样做,您应该研究或至少实例化新对象,并单独复制值(如果它们是值类型,则安全)。

已经为每个量子尝试了Lambda,我想我需要检查为什么每个量子的ListQType指向同一事物。已经为每个量子尝试了Lambda,我想我需要检查为什么每个quantum的ListQType指向相同的东西。在创建Quantums列表的地方,相同的ListQType在循环中被分配。因此,所有quantum.ListQType都引用相同的位置。谢谢。在创建Quantums列表的地方,相同的ListQtype被分配到循环中。因此,所有quantum.ListQType都引用相同的位置。谢谢