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