private static void CopyToMatrix <T>(BaseSquareMatrix <T> matrix, T[] values) { int k = 0; for (int i = 0; i < matrix.Order; i++) { for (int j = 0; j < matrix.Order; j++) { matrix[i, j] = values[k++]; } } }
private static void Validate <T>(BaseSquareMatrix <T> matrix, T[] values) { if (values == null) { throw new ArgumentNullException($"The {nameof(values)} can't be null"); } if (values.Length > matrix.Lenght) { throw new ArgumentException($"The number of element of {nameof(values)} can't more than capacity of matrix!"); } }
/// <summary> /// Extension methos for finding sum /// </summary> /// <param name="left"> Matrix </param> /// <param name="right"> Matrix </param> protected abstract SquareMatrix <T> Add(BaseSquareMatrix <T> left, SquareMatrix <T> right);
/// <summary> /// Call neede method /// </summary> /// <param name="left"> Matrix </param> /// <param name="right"> Matrix </param> public BaseSquareMatrix <T> DynamicAdd(BaseSquareMatrix <T> left, BaseSquareMatrix <T> right) => Add((dynamic)left, right);
/// <summary> /// Find sum of two matrixes /// </summary> /// <typeparam name="T"> Type of elements </typeparam> /// <param name="left"> Matrix </param> /// <param name="right"> Matrix </param> /// <returns> Sum </returns> public static BaseSquareMatrix <T> Add <T>(this BaseSquareMatrix <T> left, BaseSquareMatrix <T> right) { var visitor = new MatrixSumVisitor <T>(); return(visitor.DynamicAdd(left, right)); }