#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() возвращает строковое представление текущего объекта, данный метод есть у всех объектов, что упрощает работу.
Комментариев нет:
Отправить комментарий