2012-05-29 48 views
5

我有一个函数,为给定另一个图块的特定图块设置绘图状态。绘制状态的图块将更改周围的图块,然后相应更新。我试图说明如下有没有办法摆脱返回void的函数?

[b] [b] [a] 
[b] [a] [a] 
[a] [a] [a] where a = sand && b = water 

当a检测到b与其相邻时,它必须更新其绘制状态。所以我有一个适用于大写,小写,左大小写和右大写的函数。我现在需要修改功能,因此,它可以处理左右的情况下,右上的情况下,右下的情况下,等等,等等这是我的功能

public override void CompareBorderingTiles(Tile T) 
    { 
     if (T is Water) 
     { 
      float leftBound = location.X - (Tile.TileWidth * Tile.TileScale); 
      float rightBound = location.X + (Tile.TileWidth * Tile.TileScale); 
      float upperBound = location.Y - (Tile.TileHieght * Tile.TileScale); 
      float bottomBound = location.Y + (Tile.TileHieght * Tile.TileScale); 
      if (T.GridLocation.X == leftBound) 
      { 
       drawstate = DrawState.Left; 
      } 
      if (T.GridLocation.X == rightBound) 
       drawstate = DrawState.Right; 
      if (T.GridLocation.Y == upperBound) 
       drawstate = DrawState.Upper; 
      if (T.GridLocation.Y == bottomBound) 
       drawstate = DrawState.Lower; 
     } 

     base.CompareBorderingTiles(T); 
    } 

它应该是相当解释,为什么我想打破这个功能,或者不是。基本上我有一个枚举,告诉我什么是draw-state(drawstate是enum)。 有人可以告诉我,如果我可以设置正确的绘制状态,然后离开我的功能?

+3

你意味着你想停止你的功能?如果这是真的,你可以使用'return;'为它 –

回答

17

要结束只需使用一个return语句。

+0

我不知道我可以像这样使用return关键字,谢谢。 –

7

只需使用return;就可以立即“返回”该功能。

虽然反思,但你真的需要返回?

if (T.GridLocation.X == leftBound) 
    { 
     drawstate = DrawState.Left; 
    } 
    else if (T.GridLocation.X == rightBound) 
    { 
     drawstate = DrawState.Right; 
    } 

    else if (T.GridLocation.Y == upperBound) 
    { 
     drawstate = DrawState.Upper; 
    } 
    else if (T.GridLocation.Y == bottomBound) 
    { 
     drawstate = DrawState.Lower; 
    } 

这应该会使代码在未来更容易维护。

return; 

所以,在你的代码,你可以这样做:

public override void CompareBorderingTiles(Tile T) 
{ 
    if (T is Water) 
    { 
     float leftBound = location.X - (Tile.TileWidth * Tile.TileScale); 
     float rightBound = location.X + (Tile.TileWidth * Tile.TileScale); 
     float upperBound = location.Y - (Tile.TileHieght * Tile.TileScale); 
     float bottomBound = location.Y + (Tile.TileHieght * Tile.TileScale); 
     if (T.GridLocation.X == leftBound) 
     { 
      drawstate = DrawState.Left; 
      return; 
     } 
     if (T.GridLocation.X == rightBound) 
     { 
      drawstate = DrawState.Right; 
      return; 
     } 
     if (T.GridLocation.Y == upperBound) 
     { 
      drawstate = DrawState.Upper; 
      return; 
     } 
     if (T.GridLocation.Y == bottomBound) 
     { 
      drawstate = DrawState.Lower; 
      return; 
     } 
    } 

    base.CompareBorderingTiles(T); 
} 
+0

卡尔击败了竞争2秒:) – Brady

+0

大声笑它会更快,如果它不是最少30个字符! :) –

+0

是的,我相信我应该因为我需要根据瓷砖在我的网格上的位置来设置左上角状态,左下角状态等。 –

7

您可以return退出功能

+0

啊我不知道你可以使用自己的return关键字,我现在感觉像个白痴,谢谢。 –

3

您可以在函数中的任意位置使用return;,它将在此处保留函数。使用返回将意味着您的基本功能将被调用而不是。如果您需要基本函数的调用使用else if然后,当你条件满足,就不会检查剩余的if语句:

public override void CompareBorderingTiles(Tile T) 
    { 
     if (T is Water) 
     { 
      float leftBound = location.X - (Tile.TileWidth * Tile.TileScale); 
      float rightBound = location.X + (Tile.TileWidth * Tile.TileScale); 
      float upperBound = location.Y - (Tile.TileHieght * Tile.TileScale); 
      float bottomBound = location.Y + (Tile.TileHieght * Tile.TileScale); 
      if (T.GridLocation.X == leftBound) 
      { 
       drawstate = DrawState.Left; 
      } 
      else if (T.GridLocation.X == rightBound) 
       drawstate = DrawState.Right; 
      else if (T.GridLocation.Y == upperBound) 
       drawstate = DrawState.Upper; 
      else if (T.GridLocation.Y == bottomBound) 
       drawstate = DrawState.Lower; 
     } 

     base.CompareBorderingTiles(T); 
    } 
+0

这个 - 即使你不想调用'base'函数,只是把它包装在其他地方。这些'else if's比许多''返回''点缀更容易遵循。 – Rawling

+0

你击败了我2秒 –

0

使用return; 函数会返回一个空

相关问题