我無法從搜索中找到答案,但也許我沒有以正確的方式提問。我有一個程序,它有許多矩陣類型的函數,它們採用3D矩陣(以1D-2D鋸齒形陣列的形式)並執行元素上的函數。但是我經常需要使用相同的函數,但使用不同類型的參數:int [] [,]和float [] [,]和double [] [,]。爲多種類型的變量重載方法的更簡單方法?
到目前爲止,我只是重寫了相同的方法,但改變了類型,但我有這些東西噸,這是一個真正的痛苦,不斷重寫「重新輸入」的方法。
private float SomeFunctionA(float[][,] d)
{
float sum = 0;
for (int k = 0; k < d.GetLength(0); k++)
for (int j = 0; j < d[0].GetLength(1); j++)
for (int i = 0; i < d[0].GetLength(0); i++)
sum += d[k][i,j];
return SomeFunctionB(sum);
}
private float SomeFunctionA(double[][,] d)
{
double sum = 0;
for (int k = 0; k < d.GetLength(0); k++)
for (int j = 0; j < d[0].GetLength(1); j++)
for (int i = 0; i < d[0].GetLength(0); i++)
sum += d[k][i,j];
return SomeFunctionB(sum);
}
有沒有更容易的方法來允許不同類型?如果有一種方法可以使用具有功能的泛型主方法(即3 for循環和其他主體代碼),然後使用不同類型的輔助方法併爲每種情況調用泛型方法,那將是非常好的。
謝謝大家。
請參閱Alexei的其他解決方案,該解決方案使用委託在相當少的代碼中執行相同的操作。還要注意,正如我在答案中所說的那樣,這兩個解決方案都會增加一個相當明顯的性能成本,這對於這些低級數學運算來說可能是不可接受的。 – Servy
@Servy是的我同意,但正如我所提到的'對於這種解決方案,你可以創建更多的類,但是你可以在這種情況下支持任何運算符(不僅是+)。如果你必須使用 - ,/,*運算符來Math.Abs函數,你將不得不通過很多聚合器。 –
@Serve關於函數調用也很好。我同意這可能會傷害表現,但它依賴於使用的癡呆症的數量。 –