2015-01-20 3 views
0

Делает игру обороны башни 2D для обучения, и я отслеживаю этот учебник:Как предотвратить исключение пустой очереди из queue.Peek()?

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 Дополнительная информация: Пустая очередь. "

И он использует этот метод в нескольких частях кода. Я попытался разместить IF перед GET:

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

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

Но, похоже, это невозможно. Я не знаю, как я могу это решить.

ответ

1

Просто поместите «если» внутри метод тело и это будет хорошо

Метод начинается с «получить {» и заканчивается «}». Эта вещь называется имуществом геттера.

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

Затем измените два других геттера, чтобы проверить CurrentWave на null и затем вернуть null.

+0

Это работает, но я вынужден вернуть что-то, так что я сделал это возвращать нуль или 0 в другой: 'общественной волны CurrentWave { ПОЛУЧАЕТ { если (waves.Count> = 1) { обратные волны. Peek(); } прочее возвращение null; } } ' – ViNi

+0

Конечно, вы есть. Если вы не хотите возвращать нулевой сигнал (и затем проверяете значение null), вы можете использовать шаблон [Null object pattern] (http://en.wikipedia.org/wiki/Null_Object_pattern) (т. Е. Вернуть пустой экземпляр Wave класс) –

Смежные вопросы