public Board Put(Coordinate Location, Stone Color) { if (Color == Stone.Empty) { throw new ArgumentException("Stone cannot be Empty"); } var result = new Board(this); result.data[Location.Column, Location.Row] = Color; result.CheckState(Location.Column, Location.Row); return(result); }