我正在抓取一串数据,其中每个元素对由';'分隔字符。所以,我将一个字符串拆分成一个数组来获取每个数据块。
每个块现在由一个标签和值对组成,它们由':'分隔。但是,最终元素通常不具有匹配值。例如:
food:cheese
name:dave
car:renault
somethingelse
我抓住这些对并将它们分成第二个数组,然后通过类似的foreach迭代;
int a=0;
string[,] tmpInfo = new string[10, 2];
foreach(var info in details)
{
string[] tmp = info.Split(':');
if (tmp[1].ToString != null)
{
//do something
}
}
然而,当我遇到最后一个元素没有分隔符的奇怪场景时,我遇到了“索引超出数组范围”的问题。
从我的代码中可以看出,我尝试测试数组单元格是否为空。我也试过测试一个空字符串,但问题仍然存在。
非常感谢任何建议/指针/解决方案。
答案 0 :(得分:1)
而不是检查if (tmp[1].ToString != null)
,检查返回数组的Length
,如:
if(tmp.Length == 2) //if it should always be 2
如果字符串中有空字符串或没有分隔符,则最终会在数组中包含1个元素。稍后当您尝试访问索引1
处的元素时,您将获得异常,因为数组基于0
而tmp[1]
表示访问返回数组的第二个元素。