2011-05-16 31 views
18

我必须在运行时增加byte[]数组大小。
如何在运行时增加byte []数组大小?如何在运行时增加byte []大小?

+0

可能重复的[更改数组大小](http://stackoverflow.com/questions/4840802/change-array-size) – nawfal 2013-09-13 05:19:07

回答

48

为什么没人似乎知道Array.Resize

Array.Resize(ref myArray, 1024); 

简单得很。

PS:按照MSDN上的评论,显然这是在3.0的MSDN文档丢失;这可以解释它的流行ignotion

+1

MSDN链接http://msdn.microsoft.com/en-us/library/bb348051.aspx – 2011-05-16 12:09:16

+0

@布赖恩:谢谢,我已经抄在回答错了链接,SRY – sehe 2011-05-16 12:13:59

+6

注意,这将创建一个新的磁盘阵列,如果你在某处引用旧数组,则该数组不会更新。 – 2011-05-16 12:20:30

3

如果要增加它,为什么不摆在首位一个List<byte>开始?

7

你可以分配一个新的数组,并在与Array.Copy(..)

byte[] oldArr = new byte[1024]; 
byte[] newArr = new byte[oldArr.Length * 2]; 

System.Array.Copy(oldArr, newArr, oldArr.Length); 

oldArr = newArr; 
+0

什么是'temp'? – jams 2011-05-16 12:08:25

+0

@jams:temp是你不需要的东西[当使用'Array.Resize'](http://stackoverflow.com/questions/6017039/how-to-increase-byte-size-at-run-time/6017109#6017109)(咧嘴笑) – sehe 2011-05-16 12:10:49

+0

什么是你的代码中的'temp'? – jams 2011-05-16 12:13:09

12

复制字节您不能:数组是固定大小。

既可以使用一个重新可观集合(例如List<byte>)或创建一个新的较大的阵列和在复制原始数组的内容。


即使Array.Resize不修改传递的数组对象:它创建一个新的数组,并复制的元素。它只是节省你自己编码。区别很重要:对旧数组的其他引用将继续看到旧数组。

2

A排列是固定尺寸的,并且不能在运行时动态地改变。

你唯一的选择是创建所需大小的新数组,并从旧的阵列复制的所有字节到新的一个。

但是,为什么有这样的折磨,而不是使用List<byte>和简单地添加或删除随意的元素自己?