我正在做一個矩陣庫作爲一個學習項目,並且這樣做我已經重載了*運算符來執行矩陣乘法。我也重載它來處理標量乘(將矩陣的每個元素乘以一個double)。我的問題是當下面的代碼運行時,test2和test都被修改,這是不希望的。乘法運算符重載修改原始變量(C#)?
Matrix test2 = 2 * test;
我敢肯定,這是一個事實,即矩陣是一類,並因此被引用傳遞,但不改變矩陣的結構(東西我不認爲將是合適的一個問題,當嘗試似乎沒有工作),我看不出解決這個問題的任何方法。我將如何解決這個問題?
的實際操作者的代碼是
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;
}
我現在已經創建了一個這樣做的方法,但是有沒有辦法避免每次需要複製值時調用xxxx.Clone()? I.E.當使用ret = m1時;相當於ret = m1.Clone(); – Musiphonix
唯一的方法就是將'Matrix'實現爲一個值類型'struct'。這可能會影響您目前如何使用該類型。 (谷歌「可變結構是邪惡的」) –