【问题标题】:How to increase byte[] size at run time?如何在运行时增加 byte[] 大小?
【发布时间】:2011-05-16 12:02:22
【问题描述】:

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

【问题讨论】:

标签: c# arrays


【解决方案1】:

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

 Array.Resize(ref myArray, 1024);

简单得像馅饼。

PS:_根据 MSDN 上的评论,显然 3.0 中的 MSDN 文档中缺少此内容。

【讨论】:

  • @Brian:谢谢,我在答案中复制了错误的链接,sry
  • 请注意,这会创建一个新数组,如果您在某处引用了旧数组,则该数组将不会被更新。
  • +1 只是为了知道它的存在......但是可能有些迂腐,说这实际上并没有改变传递数组的大小。
  • @AlbinSunnanbo 它确实更新了旧数组,这就是为什么ref
  • @Alex 是对的。但请注意,它确实复制并指向一个新数组。
【解决方案2】:

你不能:数组是固定大小的。1

要么使用可调整大小的集合(例如List<byte>),要么创建一个更大的新数组并复制原始数组的内容。


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

【讨论】:

    【解决方案3】:

    您可以分配一个新数组并使用 Array.Copy(..) 复制字节

    byte[] oldArr = new byte[1024];
    byte[] newArr = new byte[oldArr.Length * 2];
    
    System.Array.Copy(oldArr, newArr, oldArr.Length);
    
    oldArr = newArr;
    

    【讨论】:

    • @jams:临时工是你不需要的when using Array.Resize(咧嘴笑)
    • @Everyone about tmp - 我把tmp 改成了oldArr 但忘了改方法,我的错。
    【解决方案4】:

    如果你必须增加它,为什么不首先从List<byte> 开始呢?

    【讨论】:

      【解决方案5】:

      数组是固定大小的,不能在运行时动态改变。

      您唯一的选择是创建一个所需大小的新数组,并将旧数组中的所有字节复制到新数组中。

      但是为什么要用这个来折磨自己,而不是使用List<byte> 并简单地随意添加或删除元素呢?

      【讨论】:

        猜你喜欢
        • 2011-05-06
        • 1970-01-01
        • 1970-01-01
        • 2021-04-02
        • 2014-12-15
        • 2016-03-06
        • 2012-11-07
        • 2016-04-23
        • 1970-01-01
        相关资源
        最近更新 更多