我正在将矩阵库作为一个学习项目,在这样做的过程中,我重载了 * 运算符来执行矩阵乘法。我还重载了它来处理标量乘法(将矩阵的每个元素乘以 double )。我的问题是,当运行以下代码时,test2 和 test 都被修改,这是不希望的。
Matrix test2 = 2 * test;
我确定这是一个问题,因为 Matrix 是一个类,因此通过引用传递,但没有将 Matrix 更改为结构(我认为这不合适,并且在尝试时不似乎不起作用),我看不出有任何解决方法。我该如何解决这个问题?
实际的操作符代码是
public static Matrix operator *(Matrix m1, double c)
{
Matrix ret = m1;
for (long i = 0; i < ret.Width; i++) // Iterate over the rows.
{
for (long p = 0; p < ret.Height; p++) // Iterate over the columns.
{
ret[i, p] *= c;
}
}
return ret;
}
最佳答案
您不应使用您的代码修改现有矩阵。签名尖叫它正在创建一个新矩阵
并返回它。
我不确定您的复制方法/构造函数是什么,但是不要将m1
分配给ret
;您应该制作 m1
的副本,修改副本,然后返回副本,留下 m1
未更改。
public static Matrix operator *(Matrix m1, double c)
{
Matrix ret = m1.Clone(); //not sure what your "copy" method is
//do the multiplication on ret
return ret;
}
关于c# - 乘法运算符重载修改原始变量(C#)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17787924/