public bool Equals(ChessBoard other) { if (ReferenceEquals(null, other)) { return(false); } if (ReferenceEquals(this, other)) { return(true); } var bothTwoDimensional = _chessPieces.Rank == other._chessPieces.Rank; var equalDimensions = Enumerable.Range(0, _chessPieces.Rank).All(dimension => _chessPieces.GetLength(dimension) == other._chessPieces.GetLength(dimension)); return(bothTwoDimensional && equalDimensions && _chessPieces.Cast <ChessPiece>().SequenceEqual(other._chessPieces.Cast <ChessPiece>())); }