У меня возникла проблема. Отбрасывание с объекта на короткий не работает.Невозможный литой от объекта до короткого
В классе у меня есть, что (Juste в Exemple):
public const uint message_ID = 110;
И в другом классе, в конструкторе, у меня есть что:
Assembly asm = Assembly.GetAssembly(typeof(ProtocolTypeManager));
foreach (Type type in asm.GetTypes())
{
if (type.Namespace == null || !type.Namespace.StartsWith(typeof(MyClass).Namespace))
continue;
FieldInfo field = type.GetField("message_ID");
if (field != null)
{
short id = (short)(field.GetValue(type));
...
}
}
У меня нет никаких проблем с недо гипсе , Мое поле не равно null и field.GetValue (тип) дает мне хороший объект (значение объекта = 110).
Где-то я читал, что распаковка из объекта в целое работу, ну, я попробовал, но он по-прежнему не работает:
object id_object = field.GetValue(type);
int id_int = (int)id_object;
short id = (short)id_object;
Исключение это один: http://puu.sh/5d2jR.png (простите за французский . Это говорит о том, что это ошибка типа или броска).
Есть ли у кого есть решение?
Спасибо, Veriditas.
Хорошо, я просто попробовал. Первый актерский состав, от объекта к uint, второй - нет. И, исправляя, я понимаю ту тупость, которую я совершил. Эта работа: объект id_object = field.GetValue (тип); uint id_uint = (uint) id_object; short id = (short) id_uint; Второй литой концерн id_uint и не id_object ... Большое вам спасибо Alberto :) – Veriditas
Второе приведение должно быть «short id = (short) id_uint;» Вы также можете сократить это до «short id = (short) (uint) id_object; ' –
Эффективно Рори, это короче. Спасибо ! – Veriditas