我正在创建一个仅具有一个2D数组来容纳所有内容的自定义矩阵类(我知道一个1D数组会更快更好,但这不是此实现的目的),我想拥有一个构造函数,并且能够执行类似的操作
Matrix a = new Matrix(2,2){{1,2},{3,4}};
并全部解决。我遇到了“'Matrix'不包含'Add'的定义,也没有扩展方法'Add'等。” 但是环顾四周之后,我仍然无法找到足够稳健的信息,以了解如何定义Add()方法以使其起作用。这是我到目前为止的代码
public class Matrix : IEnumerable
{
/* What we know abuot matricies
* - matricies are defined by rows, cols
* - addition is element-wise
*/
public IEnumerator GetEnumerator()
{
yield return m;
}
private void Add(double a)
{
// what exactly should go here anyway?
}
private double[,] m;
public double this[int rows, int cols]
{
get => m[rows, cols];
set => m[rows, cols] = value;
}
public Matrix(int rows, int cols)
{
m = new double[rows, cols];
}
...
}
因此,无论如何我将如何执行Add()方法?
试试这个代码。您的Add方法必须是公共的。同样,为了使代码安全,您必须添加验证器以检查m
矩阵的大小和提供的数据是否匹配。
private int currentRow = 0;
public void Add(params double[] a)
{
for (int c = 0; c < a.Length; c++)
{
m[currentRow, c] = a[c];
}
currentRow++;
}
如果您不提供所有行,则其余行将包含具有其默认值的元素。另外,请注意,将来可以调用此方法,并且当m矩阵中的所有行均已填充时,它将引发异常。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句