OOP 方式 - 制作一个包装器,重载它十几次:
public void Reverse(Array arr, int index, int count)
{
Array.Reverse(arr, index, count);
}
public void Reverse<T>(List<T> lst, int index, int count)
{
lst.Reverse(index, count);
}
每次您需要以这种方式反转另一个类似集合的类时,添加一个重载。这种方法依赖于系统内部,非常有效且健壮,但如果您愿意反转多种对象,则可能会很冗长。
我可以自己做更好的方式:
static class Extensions
{
public static void Reverse(this IList target, int index, int count)
{
int right = index + count - 1;
int left = index;
while (right>left)
{
var tmp = target[left];
target[left] = target[right];
target[right] = tmp;
right--;
left++;
}
}
}
只需添加范围检查/前提条件/不变量/等。此外,列表可能效率低下,因为它需要随机访问列表的内容,但我认为您无法使用“常规武器”(即不使用反射和直接内存操作)来解决它。
所以,我的建议 - 重载是要走的路。