Где A содержит указатель на B, а B содержит указатель на A.
enum Cell { EMPTY, X, O };
Cell[] cells = new Cell[9]; // ну и заполнить EMPTY:
// я не в курсе, как устроен enum C#: как в Си или как в Java
int getMove(Cell[] cells) { ... }