创建堆栈<t> </t>

时间:2013-04-11 09:50:53

标签: c# .net stack

如何按索引访问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

3 个答案:

答案 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);
            }
        }
    }