2015-03-03 4 views
-3

Я написал фрагмент кода, где я разделяю два десятичных знака, как показано ниже. когда значение z в коде равно 2.33, то оно отлично работает, но когда значение z в коде равно 2.0, в этой строке «long secondValue = Convert.ToInt64 (значения [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

Какая у вас отладка? –

+0

отладить и посмотреть, что внутри 'values'. Уверен, что это не то, что вы ожидаете ... – HimBromBeere

ответ

1

вы пытаетесь разобрать values[1] в long фактически не проверяя, есть ли значение индекса 1. Если число является integer как 2 как ваш пример, то values[0] Я бы ожидал, что будет содержать 2, и value[1], скорее всего, не будет.

Вам необходимо убедиться, что ваш индекс действительно существует, прежде чем пытаться преобразовать их в объекты с нулевым значением.

Вы можете сделать это с чем-то же просто, как

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

или что-то в этом роде.

+1

'value [1]' не 'null', его просто нет, потому что массив имеет только один элемент, поэтому исключение из-за пределов. – juharr

+0

@juharr ах, спасибо. – Kritner

+0

почему нисходящий? Это по сути тот же ответ, что и у ответа +2? (Конечно, один из них мой) – Kritner

3

ToString из 2.0 будет просто «2» без какого-либо периода, поэтому, когда вы разделите, вы получите массив с одним элементом в индексе 0. Вы можете проверить размер массива для обработки этого.

int firstValue = values.Length > 1 ? Convert.ToInt64(values[1]) : 0; 
Смежные вопросы