我有一个方法接受一个数组(浮点数或双精度数),开始和结束索引,然后对startIndex到endIndex范围内的索引进行一些元素操作.
基本上它看起来像这样:
public void Update(float[] arr, int startIndex, int endIndex)
{
if (condition1)
{
//Do some array manipulation
}
else if (condition2)
{
//Do some array manipulation
}
else if (condition3)
{
if (subcondition1)
{
//Do some array manipulation
}
}
}
Run Code Online (Sandbox Code Playgroud)
方法比这长,并涉及将一些元素设置为0或1,或者规范化数组.问题是我需要在那里传递两个float[]和double[]数组,并且不希望有一个重复的代码接受double[].
性能也很关键,因此我不想创建一个新double[]数组,向其投射浮点数组,执行计算,然后通过强制转换为浮点数来更新原始数组.
是否有任何解决方案可以避免重复的代码,但也尽可能快?
使用泛型实现该方法怎么样?可以为您的核心业务逻辑创建一个抽象基类:
abstract class MyClass<T>
{
public void Update(T[] arr, int startIndex, int endIndex)
{
if (condition1)
{
//Do some array manipulation, such as add operation:
T addOperationResult = Add(arr[0], arr[1]);
}
else if (condition2)
{
//Do some array manipulation
}
else if (condition3)
{
if (subcondition1)
{
//Do some array manipulation
}
}
}
protected abstract T Add(T x, T y);
}
Run Code Online (Sandbox Code Playgroud)
然后为每个数据类型实现一个调整为特定于类型的操作的继承类:
class FloatClass : MyClass<float>
{
protected override float Add(float x, float y)
{
return x + y;
}
}
class DoubleClass : MyClass<double>
{
protected override double Add(double x, double y)
{
return x + y;
}
}
Run Code Online (Sandbox Code Playgroud)