/// <summary>
        /// Finds min value among the elements of the row.
        /// </summary>
        /// <param name="_">Only type of this discard is important for choosing the method.</param>
        /// <param name="row">Row of matrix.</param>
        /// <returns></returns>
        public static int CalculateValue(ComparerRowMin _, int[] row)
        {
            var value = int.MaxValue;

            for (var i = 0; i < row.Length; i++)
            {
                if (row[i] < value)
                {
                    value = row[i];
                }
            }
            return(value);
        }
        /// <summary>
        /// Sorts the rows of the matrix.
        /// </summary>
        /// <param name="matrix">Matrix to sort.</param>
        /// <param name="sortBy">Sorting criterion./></param>
        /// <returns></returns>
        public int[,] Sort(int[,] matrix, SortCriteria sortBy)
        {
            // convert matrix to List of rows.
            this.matrixAsList = generateMatrixAsList(matrix);

            // choose comparer method
            IComparer <int[]> comparer = null;

            switch (sortBy)
            {
            case SortCriteria.RowSum:
                comparer = new ComparerRowSum();
                break;

            case SortCriteria.RowSumReverse:
                comparer = new ComparerRowSumReverse();
                break;

            case SortCriteria.RowMax:
                comparer = new ComparerRowMax();
                break;

            case SortCriteria.RowMaxReverse:
                comparer = new ComparerRowMaxReverse();
                break;

            case SortCriteria.RowMin:
                comparer = new ComparerRowMin();
                break;

            case SortCriteria.RowMinReverse:
                comparer = new ComparerRowMinReverse();
                break;

            default:
                break;
            }

            // apply List<T>.Sort method.
            this.matrixAsList.Sort(comparer);

            // convert List of rows back to matrix.
            return(generateMatrixAsArray(matrixAsList));
        }
        /// <summary>
        /// Finds min value among the elements of the row.
        /// </summary>
        /// <param name="_">Only type of this discard is important for choosing the method.</param>
        /// <param name="row">Row of matrix.</param>
        /// <returns></returns>
        /// <remarks>Actually calls the other method as the function is the same.</remarks>
        public static int CalculateValue(ComparerRowMinReverse _, int[] row)
        {
            ComparerRowMin dummy = null;

            return(CalculateValue(dummy, row));
        }