如何防止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 为空。
我正在制作一个 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 为空。