2010-04-01 76 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