Что я делаю не так:
object j = 149800000;
long h = (long)j;
Нужно из object конвертировать в long, в примере выше выходит необработанное исключение типа System.InvalidCastException:
Заданное приведение является недопустимым.
Если же в переменную j присвоить большое значение а-ля
object j = 111114082411778;
long h = (long)j;
то всё нормально. Также при простом присвоении переменной типа long маленького значения тоже все нормально. Я бы и использовал простой Int32, но вот значения у меня могут быть как маленькие, так и большие, и приходят они в object.
Нужно в конец добавить суффикс L, так как 149800000 компилятор воспринимает как int.
object j = 149800000L;
long h = (long)j;
можно еще так
object j = 149800000;
long h = (long)(int)j;
Я бы рекомендовал использовать 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() возвращает строковое представление текущего объекта, данный метод есть у всех объектов, что упрощает работу.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники