Mus*_*nix 2 c# types reference operators
我正在研究一个矩阵库作为学习项目,并且这样做我已经重载了*运算符来执行矩阵乘法.我也重载了它来处理标量乘法(将矩阵的每个元素乘以一倍).我的问题是,当运行以下代码时,test2和test都被修改,这是不希望的.
Matrix test2 = 2 * test;
Run Code Online (Sandbox Code Playgroud)
我确定这是一个问题,因为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;
}
Run Code Online (Sandbox Code Playgroud)
您不应该使用代码修改现有矩阵.签名尖叫它正在创建一个新的 Matrix并返回它.
我还不能肯定你的复制方法/构造函数是什么,但不分配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;
}
Run Code Online (Sandbox Code Playgroud)