2015-03-03 255 views
-3

我已经写了一段代码,我在下面分两位小数。当代码中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; 
      } 
+1

你做了什么调试? – 2015-03-03 14:11:10

+0

调试通过并看看里面'values'的内容。我敢打赌这不是你所期望的...... – HimBromBeere 2015-03-03 14:16:43

回答

1

您正在尝试解析values[1]long而不实际检查,如果有在索引1的值。如果数为integer2作为你的例子,然后values[0]我期望包含2,而value[1]可能不存在。

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

你可以用一些如

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

一样简单,或诸如此类的话做。

+1

'value [1]'不是'null',它只是不存在,因为数组只有一个项目,因此越界异常。 – juharr 2015-03-03 14:19:19

+0

@juharr啊,谢谢。 – Kritner 2015-03-03 14:21:39

+0

为什么downvote?它的答案与+2的答案相同? (当然,其中一个是我的) – Kritner 2015-03-03 14:59:16

3

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

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