C# C“错误:”;System.IndexAutoFrangeException:&x27;索引超出了数组的界限&引用; 代码:

C# C“错误:”;System.IndexAutoFrangeException:&x27;索引超出了数组的界限&引用; 代码:,c#,arraylist,indexoutofrangeexception,C#,Arraylist,Indexoutofrangeexception,我搜索了internet,但没有找到解决方法。您正在传递的字节数组没有偏移量+3元素。我最好的猜测是: ++offset 有两种增量样式,它们不相同 ++offset在使用前增加值 offset++在使用后增加值 事实上,我的一个朋友也犯了同样的错误,结果他用-1初始化了这个值。而不仅仅是将增量固定为适当的类型 您还将在一行中增加偏移三次。所以每个值都是不同的。确保这是您真正想要的。您可能超出了输入数组的范围,如异常所述。在访问索引之前,请检查索引是否在数组边界内,并尝试使用固定索引而不是递增

我搜索了internet,但没有找到解决方法。

您正在传递的字节数组没有偏移量+3元素。

我最好的猜测是:

++offset
有两种增量样式,它们不相同

++offset
在使用前增加值

offset++
在使用后增加值

事实上,我的一个朋友也犯了同样的错误,结果他用-1初始化了这个值。而不仅仅是将增量固定为适当的类型


您还将在一行中增加偏移三次。所以每个值都是不同的。确保这是您真正想要的。

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

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;
}
publicstaticintgetbyte(byte[]字节,int索引){
int结果=0;
if(索引<字节长度)
结果+=字节[索引];
其他的
返回结果;
if((索引+1)结果=(结果可能有…但肯定没有偏移量+3@Selvin-已更新,谢谢…或偏移量小于0不相关…您认为索引器的错误递增不是错误吗?`您不明白“关闭一个错误”的哪一部分?他为什么要
offset++
?他使用
++offset
[offset+1]
[offset+2]
[offset+3]
代码似乎在字节数组中获得了四个连续字节以形成一个int,这似乎非常合理,因此我非常确定他确实希望在同一行中多次递增,并且他确实希望在使用之前递增,或者他将获得两次第一个字节,然后再获得两个,而不是四个不同的字节s、 所以,虽然您的观点通常是有效的,但当您遇到这种类型的异常时,我认为您的注释与这种特定情况无关。可能是错误的。设置一个断点,看看是否调用了错误的方法(太大)
offset
。如果无法实际获取全部四个字节,则可能不希望返回构造的int。在这种情况下引发异常可能是正确的,因为几乎可以肯定,它表明向方法传递了错误的内容。也就是说,在没有所有字节的情况下构造int几乎可以肯定是正确的屏蔽实际错误。取决于应用程序和字节数组原始解析器,它可能会截断该值。如果字节数组肯定会返回4字节/int,则肯定会丢弃该数组,抛出错误或处理异常。
++offset
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;
}