powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
13 сообщений из 13, страница 1 из 1
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
    #39822365
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В переменной типа Object value могут хранится разные типы. Я проверяю другое свойство и соответственно трактую значение в нужный тип. Что то не могу понять по ошибке

Код: c#
1.
2.
3.
var temp1 = value == null ? (long?)null : (long)value;

... дальше переходим в ветку работы с параметров исходя из типа long



System.InvalidCastException: 'Unable to cast object of type 'System.Int32' to type 'System.Int64'.'

Причем в объекте вообще хранится 1.

Какого ? С какой стати нельзя привести тип меньшего размера к большему ?
...
Рейтинг: 0 / 0
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
    #39822366
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
            long? v = (long?)value;
            var temp1 = (v.HasValue) ? v.Value: null;
...
Рейтинг: 0 / 0
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
    #39822373
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
Нашел решение подобной проблемы через класс Convert.ToInt64. Сейчас все ок.

Просто ошибка очень странная :) Типа я не могу положить ваш спичечный коробок в грузовик, извините.
...
Рейтинг: 0 / 0
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
    #39822374
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто присвоить, преобразование выше даёт ошибку
Код: c#
1.
2.
3.
4.
5.
            //Int64? val = null; //1;
            Int32 val = 1;
            long? vv = val;
            var temp1 = vv;
            Console.WriteLine(vv);
...
Рейтинг: 0 / 0
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
    #39822378
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но вот почему выдает ошибку то ? Вот что странно ! Тут даже unchecked не нужен, какие тут вообще могут быть проблемы, что фреймворк ругается.
Причем я бы еще понял, если бы как раз ошибка была при присваивании, но я то явно приведение делаю.
...
Рейтинг: 0 / 0
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
    #39822425
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreНо вот почему выдает ошибку то ? Вот что странно ! Тут даже unchecked не нужен, какие тут вообще могут быть проблемы, что фреймворк ругается.
Причем я бы еще понял, если бы как раз ошибка была при присваивании, но я то явно приведение делаю.

проверил тот же код у себя - ошибки нет, преобразовывает
...
Рейтинг: 0 / 0
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
    #39822427
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинWaspNewCoreНо вот почему выдает ошибку то ? Вот что странно ! Тут даже unchecked не нужен, какие тут вообще могут быть проблемы, что фреймворк ругается.
Причем я бы еще понял, если бы как раз ошибка была при присваивании, но я то явно приведение делаю.

проверил тот же код у себя - ошибки нет, преобразовывает

Ошибся, та же ошибка на коде

Код: c#
1.
2.
Object val = 1;
var temp1 = val == null ? (long?)null : (long)val;
...
Рейтинг: 0 / 0
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
    #39822492
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreНо вот почему выдает ошибку то ?потому что long? и long это разные типы. компилятор не может определиться, какой тип должен быть у temp1.
...
Рейтинг: 0 / 0
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
    #39822524
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, разве? Была бы ошибка компиляции...
...
Рейтинг: 0 / 0
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
    #39822538
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
Код: c#
1.
Object val = 1;



присваиваем val значение 1 типа Int32 (по умолчанию целые числа все int)
теперь val хранит ссылку на объект в куче типа Int32


Ролг Хупин
Код: c#
1.
var temp1 = val == null ? (long?)null : (long)val;



пытаемся привести ссылку на объект в куче к типу Int64.
не преобразовать, а привести к типу.

это неправильно. сначала надо привести к правильному типу, потом преобразовывать.
...
Рейтинг: 0 / 0
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
    #39822539
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

нет, nullable тут вообще не причем
Код: c#
1.
2.
			object val = 5;
			long vall = (long)val;

этот код выдает ту же ошибку.
Implicit-преобразование тут не канает, потому что нет implicit для object=>long
...
Рейтинг: 0 / 0
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
    #39822541
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAntonariy,

нет, nullable тут вообще не причем
Код: c#
1.
2.
			object val = 5;
			long vall = (long)val;


этот код выдает ту же ошибку.
Implicit-преобразование тут не канает, потому что нет implicit для object=>longа вот так всё будет ок - сначала распаковываем, потом преобразовываем
Код: c#
1.
2.
			object val = 5;
			long vall = (long)(int)val;
...
Рейтинг: 0 / 0
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
    #39822592
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При приведении ссылочного типа к значимому будет анбоксинг с одновременным приведением типа и без конвертации, как уже писали выше. В IL-коде в этом месте будет инструкция unbox.any [mscorlib]System.Int64.
Jeffrey Richter, CLR via C#, Chapter 5Internally, here’s exactly what happens when a boxed value type instance is unboxed:
1. If the variable containing the reference to the boxed value type instance is null, a NullReferenceException is thrown.
2. If the reference doesn’t refer to an object that is a boxed instance of the desired value type, an InvalidCastException is thrown.
The second item above means that the following code will not work as you might expect:
Код: c#
1.
2.
3.
4.
5.
public static void Main() {
  Int32 x = 5;
  Object o = x; // Box x; o refers to the boxed object
  Int16 y = (Int16) o; // Throws an InvalidCastException
}

Logically, it makes sense to take the boxed Int32 that o refers to and cast it to an Int16. However, when unboxing an object, the cast must be to the exact unboxed value type—Int32 in this case.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]