c#如何使Stack函数像List一样

本文关键字:List 一样 函数 Stack 何使 | 更新日期: 2023-09-27 18:14:10

作为需求的一部分,我试图修改我的代码,使其行为方式与我的原始代码相同,但我似乎无法弄清楚。

我已经做了一些修改,它编译得很好,但是我不能让堆栈类像列表一样工作:

列表(原始):

private List<Gem> gems = new List<Gem>();
private List<Enemy> enemies = new List<Enemy>();
private void UpdateGems(GameTime gameTime)
{
    for (int i = 0; i < gems.Count; ++i)
    {
        Gem gem = gems[i];
        gem.Update(gameTime);
        if (gem.BoundingCircle.Intersects(Player.BoundingRectangle))
        {
            gems.RemoveAt(i--);
            OnGemCollected(gem, Player);
        }
    }
}

Stack(我的修改版本):

private Stack<Gem> gems = new Stack<Gem>();
private Stack<Enemy> enemies = new Stack<Enemy>();
/// <summary>
/// Animates each gem and checks to allows the player to collect them.
/// </summary>
private void UpdateGems(GameTime gameTime)
{
    Gem[] array = gems.ToArray();
    for (int i = 0; i < gems.Count; ++i)
    {
        Gem gem = array[i];
        gem.Update(gameTime);
        if (gem.BoundingCircle.Intersects(Player.BoundingRectangle))
        {
            gems.Pop();
            OnGemCollected(gem, Player);
        }
    }
}

c#如何使Stack函数像List一样

我能想到的最好的:

private Stack<Gem> gems = new Stack<Gem>();
private Stack<Enemy> enemies = new Stack<Enemy>();
/// <summary>
/// Animates each gem and checks to allows the player to collect them.
/// </summary>
private void UpdateGems(GameTime gameTime)
{
    var newGems = new Stack<Gem>(this.gems.Count);
    while (this.gems.Count > 0)    
    {
        var gem = this.gems.Pop();
        gem.Update(gameTime);
        if (gem.BoundingCircle.Intersects(Player.BoundingRectangle))
        {
            OnGemCollected(gem, Player);
        }
        else
        {
            newGems.Push(gem);
        }
    }
    this.gems = newGems;
}

没有什么意义

相关文章: