C#foreach循环仅对最后一项有效

C#foreach循环仅对最后一项有效,c#,list,foreach,C#,List,Foreach,因此,我在C#(XNA)中有以下代码 问题在于,它似乎只适用于最后创建的目标。但它们中的每一个都被一个类似的foreach循环正确地绘制出来 有什么不同呢?我可能错了,但这可能与您只输出一个变量有关,因此每个循环都会忽略它 i、 e intersect=true intersect=false 因此,intersect=false 编辑:尝试写入列表中的变量。这样,您就可以拥有同一变量的多个副本。我假设您只想测试列表中的a目标是否与变量tpo相交 在循环之前,应该使用false初始化inters

因此,我在C#(XNA)中有以下代码

问题在于,它似乎只适用于最后创建的目标。但它们中的每一个都被一个类似的foreach循环正确地绘制出来


有什么不同呢?

我可能错了,但这可能与您只输出一个变量有关,因此每个循环都会忽略它

i、 e

intersect=true
intersect=false

因此,intersect=false


编辑:尝试写入列表中的变量。这样,您就可以拥有同一变量的多个副本。

我假设您只想测试列表中的a
目标是否与变量
tpo
相交

在循环之前,应该使用
false
初始化
intersect
,在循环内部,只需删除
else
语句即可

这样,如果某个元素不相交,但您的
intersect
变量已设置为
true
,则不会将其重置为
false

此外,在执行
intersect=true
之后,您可能希望在
if
中添加
break
语句,因为一旦找到与
TPO
相交的
目标,就不需要测试其余数据是否相交:

foreach (Target i in Target.List)
{
      //just distance calculating with pythagoras
      if (Math.Sqrt(Math.Pow((Tpos.X - i.pos.X), 2) + Math.Pow((Tpos.Y - i.pos.Y), 2)) <= 100)
      {
           intersect = true;
           break;
      }
}
foreach(Target.List中的目标i)
{
//用毕达哥拉斯计算距离

if(Math.Sqrt(Math.Pow((Tpos.X-i.pos.X),2)+Math.Pow((Tpos.Y-i.pos.Y),2))您正在将intersect复制到某个集合中,因为如果没有,则每次都只会覆盖它。请解释您使用此循环的目标是什么。找到第一个相交的目标?搜索是否所有目标都相交?似乎对循环的工作方式有点困惑(Steve击败了我:)@user3241476完全正确!感谢您接受答案!无关提示:计算Sqrt非常昂贵,您知道如何消除它并使用10000而不是100吗?
Tower.List.Add(new Tower(Tpos));
foreach (Target i in Target.List)
{
      //just distance calculating with pythagoras
      if (Math.Sqrt(Math.Pow((Tpos.X - i.pos.X), 2) + Math.Pow((Tpos.Y - i.pos.Y), 2)) <= 100)
      {
           intersect = true;
           break;
      }
}