C# foreach中嵌套foreach后面的代码不';我不能按预期执行

C# foreach中嵌套foreach后面的代码不';我不能按预期执行,c#,C#,我有以下代码: foreach(所有syscoords中的KeyValuePair sysCoordTop) { List tempNameList=新列表(); float xTop=sysCoordTop.Value.Key; float yTop=sysCoordTop.Value.Value; 字符串nameTop=sysCoordTop.Key; foreach(所有SysCoords中的KeyValuePair sysCoordBottom){ float xBottom=sysCo

我有以下代码:

foreach(所有syscoords中的KeyValuePair sysCoordTop)
{
List tempNameList=新列表();
float xTop=sysCoordTop.Value.Key;
float yTop=sysCoordTop.Value.Value;
字符串nameTop=sysCoordTop.Key;
foreach(所有SysCoords中的KeyValuePair sysCoordBottom){
float xBottom=sysCoordBottom.Value.Key;
float yBottom=sysCoordBottom.Value.Value;
float xDiff=System.Math.Abs(xTop-xBottom);
float yDiff=System.Math.Abs(yTop-yBottom);
字符串namebooth=sysCoordBottom.Key;
if(xDiff<5f&&yDiff<5f&&namebooth!=nameTop){
tempNameList.Add(namebooth);
Log($“{namebooth}添加到{nameTop}的临时列表中”);
}
}
sysDict.Add(nameTop,tempNameList);
Debug.Log(“写入dict的临时列表”);
tempNameList.Clear();
}

我的问题是,下面的行不会在我期望的时候执行,而是在嵌套循环之前执行一次,即使我假设它们在第一个foreach循环的每个迭代中执行一次

sysDict.Add(nameTop,tempNameList);
Debug.Log(“写入dict的临时列表”);
tempNameList.Clear();


现在,我很清楚这种嵌套循环的方式并不是最好的方法。我问这个问题不是为了得到关于使用嵌套循环编写有多糟糕的无益评论。我问这个问题是为了得到我所问问题的答案。但是,如果您决定告诉我编写嵌套循环有多糟糕,请告诉我应该如何做。

不要对tempItem使用Clear方法,而是在每次迭代开始时重新初始化该对象

清除它也将清除列表中的项目


将对象添加到字典时,添加的是引用,而不是值。清除对象时,将清除值,引用该对象的所有内容都将具有相同的效果(无值)。不要清除,而是重新初始化对象

不要对tempItem使用Clear方法,而是在每次迭代开始时重新初始化该对象

清除它也将清除列表中的项目


将对象添加到字典时,添加的是引用,而不是值。清除对象时,将清除值,引用该对象的所有内容都将具有相同的效果(无值)。不是清除,而是重新初始化对象,在这里,我认为它是完全不同的,感谢不是代码实际上是按顺序执行的,只是
tempNameList
被添加到
sysDict
,然后
Clear()
ed使它看起来如此?我很困惑,但这比解释无序的执行更有意义。我不是投反对票的那个人。我理解调用
tempNameList.Clear()
有多大问题。我只是不清楚这是如何最终解决这个问题的。我唯一的猜测是,当问题说代码执行无序时,这是基于观察结果,而不是实际使用调试器进行调试。这是基于调试日志出现无序的
debug.Log(“写入dict的临时列表”)只被记录一次,所以我显然认为它是无序执行的,在这里我认为这是完全不同的,感谢不是代码实际上是无序执行的,只是
tempNameList
被添加到
sysDict
,然后
Clear()
ed让它看起来如此?我很困惑,但这比解释无序的执行更有意义。我不是投反对票的那个人。我理解调用
tempNameList.Clear()
有多大问题。我只是不清楚这是如何最终解决这个问题的。我唯一的猜测是,当问题说代码执行无序时,这是基于观察结果,而不是实际使用调试器进行调试。这是基于调试日志出现无序的
debug.Log(“写入dict的临时列表”)只被记录一次,所以我显然认为它是无序执行的。你有没有考虑过使用
var
var
for
循环缩短到
foreach(所有syscoords中的var sysCoordTop)
我不知道为什么我没有想到这一点,但是我可能应该考虑过使用
var
var
会将
for
循环缩短到
foreach(所有syscoords中的var-sysCoordTop)
我不知道为什么我没有想到这一点,但我可能应该这样做