【问题标题】:Copy byte array to another byte array in C#将字节数组复制到C#中的另一个字节数组
【发布时间】:2016-01-17 00:22:53
【问题描述】:

有两个字节数组填充了不同的值。

byte[] Array1 = new byte[5];
byte[] Array2 = new byte[5];

那么,我需要Array1 来获得与Array2 完全相同的值。

通过输入Array1 = Array2 我只会设置引用,这不会复制值。

可能的解决方案是什么?

编辑:

所有答案都很好,所有解决方案都有效。对于我的特殊情况,第一个解决方案中的代码在视觉上看起来更具描述性。

Array1 = Array2.ToArray();

Array1.CopyTo(Array2, 0);

还有

Buffer.BlockCopy(Array2, 0, Array1, 0, 5);

【问题讨论】:

标签: c# arrays


【解决方案1】:

Linq 提供的一个解决方案...

Array1 = Array2.ToArray();

编辑:在使用此 Linq 调用之前,您不需要为 Array1 分配空间。 Array1 的分配在 ToArray() 内完成。更完整的例子如下

byte[] Array2 = new byte[5];
// set values for Array2
byte[] Array1 = Array2.ToArray();

【讨论】:

  • 这是一个相当简洁的解决方案,但是由于 OP 已经分配了目标数组 并且 已经说过,“我只是设置引用,我不复制值” ,那么我认为在你的回答中指出你正在创建一个新的引用而不是将值复制到预分配的数组中是谨慎的。
  • 会做,OP中的语句“通过输入Array1 = Array2我只是设置引用,我不复制值”我认为是试图说复制了数组引用,并且值本身没有重复。在他后来的评论“但它不应该以任何方式与之联系”中似乎也是这种情况,我认为这是试图说 Array1[0] = (byte) 1 不会对 Array2 中的值产生任何影响
  • 是的,我同意。这就是为什么我认为您的答案是一个相当巧妙的解决方案。我只是认为 OP 可能需要更深入地了解机制。
  • 据我了解,Array2.ToArray() 分配了一个新数组。如果Array1 = Array2.ToArray(); 被多次执行,例如在 for 循环中会怎样?这些分配是否保留在内存中?
  • @acoder C# 有一个垃圾回收系统,所以如果你没有更多对分配内存的引用,那么这些值将被清理。我不建议在循环中分配新内存只是为了快速忽略这些值。
【解决方案2】:
Array1.CopyTo(Array2, 0);

MSDN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    相关资源
    最近更新 更多