Array.Copy:连接两个字节数组时的奇怪异常

时间:2010-04-01 22:11:12

标签: c# arrays

在我用C#开发的应用程序中,我有以下代码:

byte[] resb = new byte[Buffer.ByteLength(blockAr) + Buffer.ByteLength(previous)];
Array.Copy(blockAr, 0, resb, 0, blockAr.Length);
Array.Copy(previous, 0, resb, blockAr.Length, previous.Length);

连接两个字节数组是一个非常简单的代码。

问题是在某些特殊情况下,我不知道我有这个例外:

  

ArgumentOutOfRangeException:   sourceIndex小于下限   第一维的界限   sourceArray。

我在代码中看不到任何奇怪的东西,我无法重现异常。

有人可以帮我确定问题吗?

感谢

3 个答案:

答案 0 :(得分:1)

blockAr或previous可以是一个空数组吗?这可以解释异常,因为即使索引0也会超出范围。

答案 1 :(得分:0)

IDK但是有理由在第一行使用ByteLength然后在下一行使用Length吗?也许那里有一些细微差别导致不一致。尝试在两个地方使用ByteLength,然后尝试在两个地方使用长度,看看其中一个是否能解决你的问题。

答案 2 :(得分:0)

这不是我向你展示的代码。有缺陷的代码是:Convert.ToBase64String(byte[] array)

似乎ToBase64String内部使用Array.Copy,在特定情况下会引发我之前指出的异常。库函数不会引发自己的异常,这很奇怪。

要解决此问题,我已将其附在try - catch声明中,现在一切正常!

感谢大家的建议。