Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ? / 13 сообщений из 13, страница 1 из 1
04.06.2019, 16:05
    #39822365
WaspNewCore
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
В переменной типа 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
04.06.2019, 16:10
    #39822366
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
Код: c#
1.
2.
            long? v = (long?)value;
            var temp1 = (v.HasValue) ? v.Value: null;
...
Рейтинг: 0 / 0
04.06.2019, 16:22
    #39822373
WaspNewCore
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
Спасибо.
Нашел решение подобной проблемы через класс Convert.ToInt64. Сейчас все ок.

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

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

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

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

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



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


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



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

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

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

этот код выдает ту же ошибку.
Implicit-преобразование тут не канает, потому что нет implicit для object=>long
...
Рейтинг: 0 / 0
04.06.2019, 21:23
    #39822541
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
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
05.06.2019, 06:24
    #39822592
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ?
При приведении ссылочного типа к значимому будет анбоксинг с одновременным приведением типа и без конвертации, как уже писали выше. В 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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Unable to cast object of type 'System.Int32' to type 'System.Int64'. Что за ерунда ? / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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