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都引用相同的位置。谢谢