What we were recommending was treating each chunk as a node in an graph. The modification to your chunk data structure necessary to do this adjacency list. Note the list part doesn't dictate a List necessarily, I suggest a array for performance reasons and their simplicity.
The data structure should contain at least the two below fields.
public class Chunk {
private Point position
private Tile Tiles[]
private Chunk AdjacencyArray = new Chunk[8]
}
This allow for the below. '@' is the current chunk. 0 is the chunk to the top left of the current chunk. 1 is the chunk above the current chunk. So on and so forth all indexes of the above AdjacencyArray field.
[0][1][2]
[7][@][3]
[6][5][4]
Now assuming we have multiple chunks 1, 2, and 3 in a grid
[ ][ ][ ][ ]
[ ][1][2][ ]
[ ][3][ ][ ]
[ ][ ][ ][ ]
The AdjacencyArray for chunk 1 should be
AdjacencyArray = { null, null, null, Chunk2, null, Chunk3, null, null }
AdjacencyArray[3] = Chunk2
AdjacencyArray[5] = Chunk3
The AdjacencyArray for chunk 2 should be
AdjacencyArray = { null, null, null, null, null, null, nullChunk3, Chunk1 }
AdjacencyArray[6] = Chunk3
AdjacencyArray[7] = Chunk1
The AdjacencyArray for chunk 3 should be
AdjacencyArray = { null, Chunk1, nullChunk2, null, null, null, null, null }
AdjacencyArray[1] = Chunk1
AdjacencyArray[2] = Chunk2
I'm hoping that illustrates that an adjacency array merely stores a reference to the chunk. And the index of that reference describes where referenced chunk is located related compared to the current chunk.
Now lets say the camera is in chunk 2 and moves down. We now have to add 4. We then have to update all old chunks (O) so they and the new chunks (N) point towards each other. There are various ways to do this none of them particularly elegant. In fact I kind of like you idea of the dictionary with the location as a hash. It would allow the linking to happen in what is basically O(8).
[ ][ ][ ][ ] [ ][ ][ ][ ]
[ ][1][2][ ] [ ][O][O][ ]
[ ][3][4][ ] [ ][O][N][ ]
[ ][ ][ ][ ] [ ][ ][ ][ ]