我的代码如下:
String[] splititemcol;
String[] splititem;
String singlestring;
while (reader.Read())
{
splititemcol = reader.GetValue(2).ToString().Split((char)16); //split each item
for (int i = 0; i < splititemcol.Count(); i++)
{
splititem = splititemcol[i].ToString().Split((char)14);
resultstr.Append("<tr><td>" + splititem[0] + "</td><td>");
singlestring = "";
for(int k=0;k<splititem.Count();k++)
{
if(k==2)
{
singlestring = splititem[k].ToString();
break;
}
}
resultstr.Append(singlestring + "</td></tr>");
}
}
在上面的代码中,我可以得到第3 splititem
的值。
String[] splititemcol;
String[] splititem;
String singlestring;
while (reader.Read())
{
splititemcol = reader.GetValue(2).ToString().Split((char)16); //split each item
for (int i = 0; i < splititemcol.Count(); i++)
{
splititem = splititemcol[i].ToString().Split((char)14);
resultstr.Append("<tr><td>" + splititem[0] + "</td><td>");
singlestring =splititem[2].ToString();
resultstr.Append(singlestring + "</td></tr>");
}
}
在上面的代码中,我尝试仅通过数组索引得到第3 splititem
的值,即没有foreach
。
但它会在第9行引发Index was outside the bounds
错误,如下所示。
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.IndexOutOfRangeException: Index was outside the bounds of the array.
当我测试splititem.Count
时,它会显示4。
修改
我在变量中手动存储数组的每个值,如下所示,并且都是返回值。所以我得出的结论是,我们必须通过for循环迭代数组,或者由于字符串中的奇怪分隔符(字符14)而导致此脚本卡住。
String[] splititemcol;
String[] splititem;
String singlestring;
String item="";
String weight="";
String quantity="";
String amount="";
while (reader.Read())
{
splititemcol = reader.GetValue(2).ToString().Split((char)16); //split each item
for (int i = 0; i < splititemcol.Count(); i++)
{
splititem = splititemcol[i].ToString().Split((char)14);
resultstr.Append("<tr><td>" + splititem[0] + "</td><td>");
singlestring = "";
for(int k=0;k<splititem.Count();k++)
{
if (k == 0)
item = splititem[k].ToString();
else if (k == 1)
weight = splititem[k].ToString();
else if (k == 2)
quantity = splititem[k].ToString();
else if (k == 3)
amount = splititem[k].ToString();
}
resultstr.Append(weight + "</td><td>" + quantity + "</td><td>" + amount + "</td></tr>");
}
}
感谢所有人尝试在这个问题上提供解决方案。
答案 0 :(得分:1)
这意味着splititem[2]
不存在。在你的第一种情况下,你有以下条件,只考虑将有splititem[2]
的行,但在第二种情况下,你试图直接访问索引2导致异常
if(k==2)
{
singlestring = splititem[k].ToString();
break;
}
答案 1 :(得分:0)
比较这个(来自第一个片段):
if(k==2)
{
singlestring = splititem[k].ToString();
break;
}
这个(来自第二个片段):
singlestring =splititem[2].ToString();
在第一种情况下,您进行检查并提供k==2
为真,您会读取相应的值。这是第二种情况下的错过,没有人保证splititem
的长度为3。