Вы не пытаетесь преобразовать int в double в этой строке; Результатом ToString () является строка, а не int. Если объект в значениях [1] является целым, то вместо этого сделайте следующее:
totalUnits = (double)(int)values[1];
Конечно, это работает лучше, если totalUnits фактически объявлено как double, а не как int.
Относительно другой ошибки
Локальная переменная с именем 'values' не может быть объявлена в этой области, поскольку она будет придавать другое значение значениям, которые уже используются в родительской или текущей области для обозначения некоторых других.
Это хитрая ошибка, которая доставляет много проблем людям. Проблема real заключается в том, что локальная переменная с именем 'values' не может быть объявлена в этой области, поскольку она будет придавать другое значение значениям, которые уже используются в родительской области для обозначения чего-то еще. Если вы решите эту проблему, ошибка компиляции исчезнет.
Другими словами, «значения» означают переменную, которая объявлена примерно на одну треть в коде. Вы пытаетесь создать еще одну переменную с именем «values» чуть более чем на полпути кода. Если бы это второе объявление было разрешено, то одно и то же имя («значения») означало бы две разные вещи внутри этого метода.