我无法从搜索中找到答案,但也许我没有以正确的方式提问。我有一个程序,它有许多矩阵类型的函数,它们采用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关于函数调用也很好。我同意这可能会伤害表现,但它依赖于使用的痴呆症的数量。 –