2015-03-03 66 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; 
相關問題