OOP-way-ラッパーを作成し、それを数十回オーバーロードします:
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);
}
このような方法で別のコレクションに似たクラスを逆にする必要があるたびに、オーバーロードを追加します。このアプローチは、非常に効果的で堅牢なシステム内部に依存していますが、多くの種類のオブジェクトを逆にする場合は冗長になる可能性があります。
I-can-do-it-myself-better-way:
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++;
}
}
}
範囲チェック/前提条件/不変条件などを追加するだけです。また、リストの内容にランダムにアクセスする必要があるため、リストでは非効率的かもしれませんが、「通常兵器」を使用して(つまり、反射や直接メモリ操作を使用せずに)回避することはできないと思います。
だから、私の提案-オーバーロードは行く方法です。