0

如何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

4

3 回答 3

3

Stack是一种不能这样使用的集合类型。
这是一个LIFO集合(后进先出):您可以从堆栈中弹出的唯一元素是您推入的最后一个元素。

我邀请您阅读一些有关数据结构的文档:http ://en.wikipedia.org/wiki/List_of_data_structures

于 2013-04-11T09:56:02.573 回答
1

您使用了错误的数据结构。如果要索引和删除集合中的任意元素,请使用简单的List<T>.

于 2013-04-11T09:55:19.460 回答
0

对于集合,我不会使用堆栈。堆栈是一种在后进先出情况下非常有效的数据结构。由于您想在 Collection 上执行其他操作,因此 Stack 对您来说不是一个好的选择。我建议你尝试一个列表。对于另一个问题:

使用 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);
            }
        }
    }

于 2013-04-11T09:55:37.307 回答