关于 C#循环的问题,虚心求指教
代码如下
                       if (buffer[0] == 0x00 && buffer[1] == 0x32)
                        {
                            int i = 1;
                            do
                            {
                                i++;
                            } while (buffer[i] != 0x0D);
                                buffer.CopyTo(0, hex_data, 0, i);//复制一条完整数据到具体的数据缓存
                                data_1_catched = true;
                                buffer.RemoveRange(0, i);//正确分析一条数据,从缓存中移除数据。                        
                        }
这是段死循环代码,buffer[]数组是我用来接收数据的,但是数据不一定完整,很有可能不包含那个判断,while (buffer[i] != 0x0D);很有可能这次接收的数据里面不包含0x0D这个值,这样i就会不断增加而超过buffer.Count,于是程序就报错了。错误是:
索引超出范围。必须为非负值并小于集合大小。
参数名: index    
求大神指点迷津
我修改了一下,改成
                               do
                            {
                                if (i< buffer.Count)
                                {
                                    i++; 
                                }
                                else 
                                {
                                    break; 
                                }
                                
                            } while (buffer[i] != 0x0D);
还是会报错

解决方案 »

  1.   

    while (i< buffer.Count && buffer[i] != 0x0D);
      

  2.   

    do
    {
       i++;
    } while (buffer[i] != 0x0D && i<buffer.Count);
      

  3.   


    while的判断条件是可以组合的~~
      

  4.   

     buffer.RemoveRange(0, i);i=0;
     RemoveRange后buffer长度会变的,你跟踪下很容易就发现的
      

  5.   

    每次报错时  i的值等于buffer.Count   那个是会改变buffer里的数量   但是报错不是在那里
      

  6.   

    do
    {
       i++;
    } while (buffer[i] != 0x0D && i<buffer.Count-1);
      

  7.   

    do
    {
       i++;
    } while (buffer[i] != 0x0D && i<buffer.Count-1);