Is there any way to break out of a function that returns void?

c#, oop

Solution

Just use a return statement where you want to end:

return;

So, in your code you could do:

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

Problem

I have a function that sets a draw-state for a specific tile given another tile. The tile that's draw state is going to change compares tiles that are surrounding it and then updates accordingly. I'll try to illustrate that below ``` [b] [b] [a] [b] [a] [a] [a] [a] [a] where a = sand && b = water ``` when a detects that b is bordering it, it must update its draw-state. So I have a function that works for an upper case, lower case, left case, and right case. I now need to modify that function so it can handle a left-right case, upper-right case, lower-right case, etc. etc. Here is my function ``` 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); } ``` It should be pretty explanatory as to why i'd want to break out of this function, or maybe not. Basically I have an enum which tells me what my draw-state is (drawstate is the enum). Can anybody tell me if I can set that correct draw state and then get out of my function?

Original source

Related problems