Делает игру обороны башни 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(); }
}
}
Но, похоже, это невозможно. Я не знаю, как я могу это решить.
Это работает, но я вынужден вернуть что-то, так что я сделал это возвращать нуль или 0 в другой: 'общественной волны CurrentWave { ПОЛУЧАЕТ { если (waves.Count> = 1) { обратные волны. Peek(); } прочее возвращение null; } } ' – ViNi
Конечно, вы есть. Если вы не хотите возвращать нулевой сигнал (и затем проверяете значение null), вы можете использовать шаблон [Null object pattern] (http://en.wikipedia.org/wiki/Null_Object_pattern) (т. Е. Вернуть пустой экземпляр Wave класс) –