public static IPosition Neighbour(this IPosition position, IDirection direction) { var index = position.Along(direction.Alignment) + direction.Delta.Quantity(); if (index < -1 || 1 < index) { return null; } switch (direction.Alignment) { case Alignment.Columns: return new Position((Columns) index, position.Row); case Alignment.Rows: return new Position(position.Column, (Rows) index); default: throw new ArgumentException(); } }