2010-04-01 60 views
0

在我的应用程序,在C#开发,我有以下代码:Array.Copy:奇怪的例外,同时连接两个字节数组

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的第一维的下 。

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

任何人都可以帮助我找出问题吗?

谢谢

+0

请添加'blockAr'和'previous'数组的声明。换句话说,你确定它们是'byte []'吗?如果是这样,为什么'Buffer.ByteLength(...)'调用?你不能直接叫'.Length'吗? – 2010-04-03 07:00:04

回答

1

可能blockAr或previous是一个空的数组?这将解释这个例外,因为即使索引0也会超出范围。

+0

没有,因为当blockAr为空时(blockAr = {})0的srcIndex是好的,我没有例外。我已经看到,只有在索引是负数的情况下,我才有例外! 但是索引在源代码中硬编码!!!!! 这是一件非常非常奇怪的事情! – robob 2010-04-02 16:13:06

0

IDK,但是有没有理由在第一行使用ByteLength,然后在下一行代替使用Length?也许在那里有一些细微的差异。尝试在两个地方使用ByteLength,然后在两个地方尝试使用Length,并查看它们中的一个是否可以解决您的问题。

0

这不是我向您展示的代码。越野车代码是:Convert.ToBase64String(byte[] array)

看起来ToBase64String内部使用Array.Copy并在特定情况下引发了我指出的异常。非常奇怪的是,一个库函数不会引发它自己的异常。

要解决此问题,我已将它包含在try - catch声明中,现在全部正常!

感谢所有的建议。

+0

哦,那么你可以关闭这个问题并且/或者把它作为一个可以接受的答案吗? – 2010-04-03 07:01:36