楼主的问题在于固定指定了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();
} }
}
当第一次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();
} }
}
{
continue;
}另外,lz下面的代码放到foreach里面是否不太妥当?//下面是绑到DataGridView上了
ListData(leftP, conditions, compare, comparevalue, rightP, logic);
gridControl1.DataSource = data;
简单的是用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;
}