楼主的问题在于固定指定了column数组的索引
当第一次foreach时,string[] column = i.Split(new char[] { ',' });
得到的column确有6个元素,这当然不会报错,但当,第二次foreach再执行到这里的时候,就没有6个元素了,第三次的i为空当然就会报错.
以下是我的测试demo,楼主根据自己的用途可以自己分析,很容易就可以得到答案. class Class3
    {
        static void Main(string[] args)
        {
            //col0   col1   col2   col3   col4   col5 
            //((    fnumber  >=    0514          and 
            //      fnumber   <     0519    ))         
            string str = "((,fnumber,>=,0514,,and;,fnumber,<,0519,)),; ";
            string[] row = str.Split(new char[] { ';' });
            foreach (string i in row)
            {
                if (i != String.Empty)
                {
                    
                    string[] column = i.Split(new char[] { ',' });
                    foreach (string item in column)
                    {
                        Console.Write(string.Format("{0}分隔符",item));
                    }
                    Console.WriteLine();
                }
                 
                Console.WriteLine();
            }        }
    }

解决方案 »

  1.   

    判断空串不是很妥当,还是判断下分割后数组的长度,如果小于6就跳出本次循环,如下:if (i.Length < 6)
    {
       continue;
    }另外,lz下面的代码放到foreach里面是否不太妥当?//下面是绑到DataGridView上了
        ListData(leftP, conditions, compare, comparevalue, rightP, logic);
        gridControl1.DataSource = data;
      

  2.   

    你的字符串不太符合你的要求
    简单的是用trim把开始结束的分割字符去掉
    类似string str = "((,fnumber,>=,0514,,and;,fnumber,<,0519,)),;";
    str=str.Trim(';');
    string[] array = str.Split(';');
    foreach (string i in row)
    {
        i.trim(',');
        string[] column = i.Split(new char[] { ',' });
        col0=column[0].ToString();
        ……
         col5=column[5].ToString();
    //下面是绑到DataGridView上了
        ListData(leftP, conditions, compare, comparevalue, rightP, logic);
        gridControl1.DataSource = data;
    }
      

  3.   

    CSDN 这不已经有很多回复了为啥还给我发请求?