如何防止queue.Peek()的空队列异常?

How to prevent the empty queue exception from queue.Peek()?

我正在制作一个 2D 塔防游戏来学习,我正在学习这个教程:

http://xnatd.blogspot.com.br/2010/10/tutorial-9-multiple-waves.html

里面的代码使用了波队列中的Peek:

public Wave CurrentWave // Get the wave at the front of the queue

{
    get { return waves.Peek(); }
}

public List<Enemy> Enemies // Get a list of the current enemeies

{
    get { return CurrentWave.Enemies; }
}

public int Round // Returns the wave number

{
    get { return CurrentWave.RoundNumber + 1; }
}

但问题是,当队列中没有更多波时,它会崩溃:

“'System.InvalidOperationException' 类型的未处理异常发生在 System.dll 附加信息:空队列。"

并且它在代码的多个部分都使用了这个方法。我试图在 GET 之前放置一个 IF,例如:

    public Wave CurrentWave // Get the wave at the front of the queue

    {
        if (waves.Count >= 1)
       {
        get { return waves.Peek(); }
       }
    }

但似乎不可能。不知道怎么解决。

只需将您的'if' 放在方法体中就可以了

该方法以 'get {' 开头,以“}”结尾。那个东西叫做属性getter.

public Wave CurrentWave // Get the wave at the front of the queue
{    
    get 
    { 
       if (waves.Count >= 1)
       {
          return waves.Peek(); 
       }
       else
       {
          return null;
       }
    }
}

然后,修改另外两个 getter 以检查 CurrentWave 是否为空,然后 return 为空。