C#foreach循环仅适用于最后一项

时间:2014-03-02 23:28:46

标签: c# list foreach

所以我在C#(XNA)中有以下代码

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;
      }
      else
      {
           intersect = false;
      }
}

这些“目标”中的每一个都是这样创建的:

Tower.List.Add(new Tower(Tpos));

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

有什么不同?

2 个答案:

答案 0 :(得分:2)

我假设您只想测试列表中的Target是否与变量Tpos相交。

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

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

此外,您可能需要在breakif内添加intersect = true语句,因为一旦找到与Target相交的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;
      }
}

答案 1 :(得分:1)

我可能错了,但它可能与你只输出一个变量这一事实有关,所以它会被每个循环覆盖。

intersect = true; intersect = false;

因此intersect = false。

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