C#错误:“ System.IndexOutOfRangeException:'索引超出了数组的范围。' ”

时间:2018-11-07 15:18:27

标签: c# arraylist indexoutofrangeexception

代码:

public static int GetInt(byte[] bytes, int offset) => (bytes[offset] | bytes[++offset] << 8 | bytes[++offset] << 16 | bytes[++offset] << 24);

错误:

System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'

我搜索了互联网,但还没有解决。

3 个答案:

答案 0 :(得分:1)

您要传递的字节数组没有offset + 3个元素。

答案 1 :(得分:0)

您可能超出了输入数组的范围,如异常所言。在访问索引之前,请检查索引是否在数组范围内,并尝试使用固定索引而不是递增索引:

public static int getByte(byte[] bytes, int index) {
    int result = 0;
    if(index < bytes.Length)
        result += bytes[index];
    else
        return result;
    if((index+1) < bytes.Length)
        result = (result << 8) + bytes[index+1];
    else
        return result;
    if((index+2) < bytes.Length)
        result = (result << 8) + bytes[index+2];
    else
        return result;
    if((index+3) < bytes.Length)
        result = (result << 8) + bytes[index+3];
    else
        return result;

    return result;
}

答案 2 :(得分:-2)

我最好的猜测是

++offset

有两种增量样式,它们是不同的。

++offset在使用前 增大值。

offset++在使用后 会增加其值。

我实际上有我的一个朋友犯了同样的错误,导致他最终以-1初始化了值。而不是只是将增量固定为正确的类型。

您还将在一行中增加偏移三位一体。因此,每个值都将不同。确保这是您真正想要的。