如何按索引访问Stack<T>
中的项目?
如何解决我想要制作的游戏的错误?
private void UpdateDiamonds(GameTime gameTime)
{
for (int i = 0; i < diamonds.Count; ++i)
{
Gem ruby = diamonds[i];
ruby.Update(gameTime);
if (ruby.BoundingCircle.Intersects(Player.BoundingRectangle))
{
diamonds.Pop(i--);
OnGemCollected(ruby, Player);
}
}
}
这些是我得到的错误:
Cannot apply indexing with [] to an expression of type 'System.Collections.Generic.Stack<>
No overload for method 'Pop' takes 1 arguments
答案 0 :(得分:3)
Stack 是一种不能像这样使用的集合类型 这是 LIFO 集合(后进先出):您可以弹出堆栈的唯一元素是您推送的最后一个元素。
我邀请您阅读一些有关数据结构的文档:http://en.wikipedia.org/wiki/List_of_data_structures
答案 1 :(得分:1)
您使用的是错误的数据结构。如果要索引和删除集合中的任意元素,请使用简单的List<T>
。
答案 2 :(得分:0)
对于集合,我不会使用Stack。堆栈是一种数据结构,当您具有Last In,First Out情况时,该数据结构非常有效。由于您希望在Collection上执行除此操作之外的操作,因此Stack不适合您。我建议你尝试一下List。对于另一个问题:
使用Linq函数ElementAt(int index);
:
using System.Linq;
private void UpdateDiamonds(GameTime gameTime)
{
for (int i = 0; i < diamonds.Count; ++i)
{
Gem ruby = diamonds.ElementAt(i);
ruby.Update(gameTime);
if (ruby.BoundingCircle.Intersects(Player.BoundingRectangle))
{
diamonds.Pop(i--);
OnGemCollected(ruby, Player);
}
}
}