如何解决“索引超出数组范围”?

时间:2015-03-03 14:09:29

标签: c# .net

我已经写了一段代码,我将两位小数分成如下。当代码中z的值类似于2.33时,它工作正常,但当代码中的z值为2.0时,在此行中“long secondValue = Convert.ToInt64(values [1]);”它正在崩溃,因为“索引超出了数组的范围”

  result_lstCatalogcount.CountofItems = Convert.ToInt32(item1.itemcount);
            double x = Convert.ToDouble(item1.itemcount);
            double y = qs.Ipp;
            double z = x / y;
            int a = Convert.ToInt32(z);
            //double value = 2635.215;
            var values = z.ToString(CultureInfo.InvariantCulture).Split('.');
            int firstValue = Convert.ToInt32(values[0]);

            long secondValue = Convert.ToInt64(values[1]);
            if(secondValue > 1)
            {
                result_lstCatalogcount.Pagination = firstValue + 1;
            }
            else
            {
                result_lstCatalogcount.Pagination = firstValue;
            }

2 个答案:

答案 0 :(得分:3)

2.0的ToString只是“2”,没有句号,所以当你分裂时,你得到一个只有一个项目在索引0的数组。你可以检查数组的大小来处理这个。 / p>

int firstValue = values.Length > 1 ? Convert.ToInt64(values[1]) : 0;

答案 1 :(得分:1)

您尝试将values[1]解析为long而未实际检查索引1中是否存在值。如果该数字为integer,则为2。例如,values[0]我希望包含2value[1]可能不存在。

在尝试将索引转换为不可为空的对象之前,您需要检查索引是否确实存在。

你可以用简单的东西来做到这一点

double secondValue = 0;
if (values.Length > 1)
{
    secondValue = Convert.ToInt64(values[1]);
}

或者那种效果。