C# 创建堆栈<;T>;

C# 创建堆栈<;T>;,c#,.net,stack,C#,.net,Stack,如何按索引访问堆栈中的项目 如何修复我正在尝试制作的游戏的错误 private void UpdateDiamonds(GameTime gameTime) { for (int i = 0; i < diamonds.Count; ++i) { Gem ruby = diamonds[i]; ruby.Update(gameTime); if (ruby.BoundingCircle.Intersects

如何按索引访问
堆栈中的项目

如何修复我正在尝试制作的游戏的错误

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);
        }
    }
}
private void UpdateDiamonds(游戏时间游戏时间)
{  
对于(整数i=0;i
以下是我得到的错误:

无法将带[]的索引应用于“System.Collections.Generic.Stack”类型的表达式


方法“Pop”没有重载1个参数

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

如果使用了错误的数据结构。如果要索引和删除集合中的任意元素,请对集合使用简单的
列表

,我不会使用堆栈。堆栈是一种数据结构,在后进先出的情况下非常有效。由于您希望在集合上执行其他操作,因此堆栈不是一个好的选择。我建议你试试清单。关于另一个问题:

使用Linq函数
ElementAt(int索引)



私有void UpdateDiamonds(游戏时间游戏时间)
{  
对于(整数i=0;i.ElementAt(i);
ruby.Update(游戏时间);
if(ruby.BoundingCircle.Intersects(Player.BoundingRectangle))
{
钻石。流行音乐(i-);
Ongem(ruby,播放器);
}
}
}

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

使用Linq函数
ElementAt(int索引)



私有void UpdateDiamonds(游戏时间游戏时间)
{  
对于(整数i=0;i.ElementAt(i);
ruby.Update(游戏时间);
if(ruby.BoundingCircle.Intersects(Player.BoundingRectangle))
{
钻石。流行音乐(i-);
Ongem(ruby,播放器);
}
}
}
堆栈是一种集合类型,不能这样使用。
它是一个后进先出的集合(后进先出):你能从堆栈中弹出的唯一元素是你最后一次推入的元素

我邀请您阅读一些关于数据结构的文档:

堆栈是一种不能像那样使用的集合类型。
它是一个后进先出的集合(后进先出):你能从堆栈中弹出的唯一元素是你最后一次推入的元素


我邀请您阅读一些关于数据结构的文档:

如果需要随机成员访问,您确定需要堆栈吗?您不能使用这样的堆栈。您需要使用
列表
堆栈是后进先出的,而不是随机的。您的数据结构不正确。如果需要随机成员访问,您确定需要堆栈吗?您不能使用这样的堆栈。您需要使用
列表
堆栈是后进先出的,而不是随机的。您的数据结构不正确。与此相对,“解决”了第一个编译器错误,但对第二个编译器错误没有帮助。你不能从堆栈中弹出任意元素。事实上,你已经看过了。请稍等。谢谢你的建议,不过是的,我就用这个清单。更简单。这“解决”了第一个编译器错误,但对第二个没有帮助。你不能从堆栈中弹出任意元素。事实上,你已经看过了。请稍等。谢谢你的建议,不过是的,我就用这个清单。更容易。
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);
            }
        }
    }