This is what my tile map looks like (red highlighting added for clarity):

[![enter image description here][1]][1]

My code:

    private List<List<int>> _layoutLayer = new List<List<int>>(50); // Layout Layer
    private List<List<int>> _trLayer = new List<List<int>>(50); // Transitional Layer
    private List<List<int>> _entityLayer = new List<List<int>>(50); // Object Layer
    private List<List<int>> _logicLayer = new List<List<int>>(50); // Logic Layer

    // To add a tile
    if (inputManager.IsMouseHeld(true))
    {
    	try
    	{
    		switch (_currentLayer)
    		{
    			case LayerRepresentation.LayoutLayer:
    				_layoutLayer[_gridMouseY][_gridMouseX] = _currentTile;
    				break;
    			case LayerRepresentation.TransitionalLayer:
    				_trLayer[_gridMouseY][_gridMouseX] = _currentTile;
    				break;
    			case LayerRepresentation.EntityLayer:
    				_entityLayer[_gridMouseY][_gridMouseX] = _currentTile;
    				break;
    			case LayerRepresentation.LogicLayer:
    				_logicLayer[_gridMouseY][_gridMouseX] = _currentTile;
    				break;
    		}
    	}
    	catch
    	{
             // Player clicked outside of map bounds, add specified amount of tiles to map
    	}
    }

What I need:

When the player clicks outside of map bounds for example on the point A, add the amount of tiles between point A and the map to the map's height. Do the same with point B, but add to the map width instead.


What I've tried:

        // Inside the above catch block
		if (_mapHeight - _gridMouseY == 0 && _gridMouseX < _mapWidth && _gridMouseX > -1)
		{
			List<int> tempDefaultLayout = new List<int>();
			List<int> tempDefaultOther = new List<int>();

			for (int i = 0; i < _layoutLayer[0].Count; i++)
			{
				tempDefaultLayout.Add(0);
				tempDefaultOther.Add(-1);
			}
			_layoutLayer.Insert(_gridMouseY, tempDefaultLayout);
			_trLayer.Insert(_gridMouseY, tempDefaultOther);
			_entityLayer.Insert(_gridMouseY, tempDefaultOther);
			_logicLayer.Insert(_gridMouseY, tempDefaultOther);
			_mapHeight++;
		}
		else if (_mapWidth - _gridMouseX == 0 && _gridMouseY < _mapHeight && _gridMouseY > -1)
		{
			for (int y = 0; y < _layoutLayer.Count; y++)
			{
				for (int x = 0; x < _layoutLayer[y].Count; x++)
				{
					if (_layoutLayer[y].Count <= _mapWidth)
					{
						_layoutLayer[y].Add(0);
						_trLayer[y].Add(-1);
						_entityLayer[y].Add(-1);
						_logicLayer[y].Add(-1);
					}
				}
			}
			_mapWidth++;
		}
		return;

The problems:

>The first part is about adding tiles to the height (only one row at a time) Adding the temp `List`s to the layer `List`s with `List.Add()` doesn't work, I don't know why. I used `List.Insert` instead.

>The second part is used to add a single column to the map one at a time.

Any help would be appreciated.

  [1]: https://i.sstatic.net/PvYbY.png