Страницы

Поиск по вопросам

пятница, 13 декабря 2019 г.

Конвертирование из object в long

#c_sharp


Что я делаю не так:

object j = 149800000;
long h = (long)j;


Нужно из object конвертировать в long, в примере выше выходит необработанное исключение
типа System.InvalidCastException:


  Заданное приведение является недопустимым.


Если же в переменную j присвоить большое значение а-ля

object j = 111114082411778;
long h = (long)j;


то всё нормально. Также при простом присвоении переменной типа long маленького значения
тоже все нормально. Я бы и использовал простой Int32, но вот значения у меня могут
быть как маленькие, так и большие, и приходят они в object.
    


Ответы

Ответ 1



Нужно в конец добавить суффикс L, так как 149800000 компилятор воспринимает как int. object j = 149800000L; long h = (long)j; можно еще так object j = 149800000; long h = (long)(int)j;

Ответ 2



Я бы рекомендовал использовать Int64.TryParse - преобразует строковое представление числа в эквивалентное ему 64-битовое целое число со знаком. Возвращает значение, указывающее, успешно ли выполнено преобразование. Вот и пример преобразования: object j = 149800000; long number; bool result = Int64.TryParse(j.ToString(), out number); if (result) { // успешно преобразовали. В number - результат } else { // что-то пошло не так } Или же использовать Convert.ToInt64 - преобразует заданное строковое представление числа в эквивалентное 64-битовое целое число со знаком. Немного менее безопасный вариант преобразования: object j = 149800000; long result = Convert.ToInt64(j); Если тут не удастся преобразовать - словим исключение. Метод ToString() возвращает строковое представление текущего объекта, данный метод есть у всех объектов, что упрощает работу.

Комментариев нет:

Отправить комментарий