配列から配列フラグメントを取得する必要があります。Array.Copy() の使用にうんざりしています。new ArraySegment(..).Array は元の [完全な] 配列を返します。以下は私が思いついたものですが、かなり不自由だと思います。これを行うより良い方法はありますか?
class Program
{
static void Main(string[] args)
{
var arr = new ArraySegment<byte>(new byte[5] { 5, 4, 3, 2, 1 }, 0, 2).ArrayFragment();
for (int i = 0; i < arr.Length; i++)
Console.WriteLine(i);
Console.Read();
}
}
static class Extensions
{
public static T[] ArrayFragment<T>(this ArraySegment<T> segment)
{
var arr = new T[segment.Count];
Array.Copy(segment.Array, segment.Offset, arr, 0, segment.Count);
return arr;
}
}
前もって感謝します。
更新: 上記は単なる例です。
私はメソッドを持っています: byte [] CalculateXXX(byte [] key, byte [] message); このメソッド内で配列操作を行います。配列の一部を返したい。ArraySegment は IEnumerable を実装せず、セグメント new ArraySegment(arr...) だけを含む配列を返しません。Array は完全な元の配列を返します。
var rval = new byte[4];
//new ArraySegment(finalOutputBuffer, 0, 4).SegmentedArray();
Array.Copy(finalOutputBuffer, 0, rval, 0, 4);
配列フラグメントを返すために上記のことをしなければならなかったことがわかりました。[新しい配列として]配列のフラグメントを返すより良い方法があるかどうか疑問に思っていました。