我有一个大小的byte []数组,我想把它截断成一个更小的数组?
我只是想结束这个结局。
答案 0 :(得分:37)
数组在C#(.NET)中是固定大小的。
您必须将内容复制到新内容。
byte[] sourceArray = ...
byte[] truncArray = new byte[10];
Array.Copy(sourceArray , truncArray , truncArray.Length);
答案 1 :(得分:23)
您可以使用Array.Resize
,但所有这一切确实是制作原始数组的截断副本,然后用新的数组替换原始数组。
答案 2 :(得分:8)
private static void Truncate() {
byte[] longArray = new byte[] {1,2,3,4,5,6,7,8,9,10};
Array.Resize(ref longArray, 5);//longArray = {1,2,3,4,5}
//if you like linq
byte[] shortArray = longArray.Take(5).ToArray();
}
答案 3 :(得分:6)
我通常会创建一个扩展方法:
public static byte[] SubByteArray(this byte[] byteArray, int len)
{
byte[] tmp = new byte[len];
Array.Copy(byteArray, tmp, len);
return tmp;
}
可以像这样轻松调用字节数组:
buffer.SubByteArray(len)
答案 4 :(得分:5)
顺便说一句,Array.Resize方法需要更多的时间才能完成。在我的简单情况下,我只需要调整字节数组(约8000个项目到~20个项目):
答案 5 :(得分:3)
您不能在C#中截断数组。它们的长度是固定的。
如果您想要一个可以截断并像数组一样运行的数据结构,则应使用List<T>
。您可以使用List<T>.RemoveRange
方法来实现此目的。