我需要从数组中获取数组片段。我厌倦了使用 Array.Copy()。new ArraySegment(..).Array 返回原始的 [full] 数组。下面是我想出来的,但我觉得它很蹩脚。有一个更好的方法吗?
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);
我发现我必须执行上述操作才能返回一个数组片段。只是想知道是否有更好的方法来返回数组的片段[作为新数组]。