2015-01-20 12 views
0

나는 학습을위한 2D 타워 방어 게임을 만들고 있어요, 나는이 자습서 다음 해요 :queue.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; } 
} 

:

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

가있는 코드가 전파 큐의 픽을 사용을 프로그래머 더 이상 파도가 큐에,이 충돌하지 않는 경우 그러나 문제는,이다 :

"처리되지 않은 'System.InvalidOperationException'형식의 예외가 System.dll을,617 발생추가 정보 : 빈 대기열입니다. "

그리고 코드의 여러 부분에서이 메서드를 사용합니다. 나는 GET 전에 IF를 넣으려고했다 :

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; 
     } 
    } 
} 

그런 다음, 널 (null)에 대한 CurrentWave을 확인하는 두 게터를 수정 한 다음는 null를 돌려줍니다.

+0

그것은 작동하지만 난 뭔가를 반환하도록 강요하고있어, 그래서 그것이 다른 사람에 null 또는 0을 반환했다 : '공공 웨이브 CurrentWave { GET { (waves.Count> = 1) { 경우를 return waves.Peek(); } else return null; } }' – ViNi

+0

물론입니다. 신호 null을 반환하고 싶지 않고 null을 확인하려면 [Null 객체 패턴] (http://en.wikipedia.org/wiki/Null_Object_pattern)을 사용할 수 있습니다 (즉, Wave의 빈 인스턴스를 반환합니다. 수업) –