我遇到了一个问题,将对象转换为短整型无法正常工作。
在一个类中,我有以下内容(仅供参考):
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));
...
}
}
在转换之前,我的程序一切正常。我的字段不是空的,而且field.GetValue(type)返回了正确的对象(即value = 110)。
我曾经看到过一个地方说,从object到int的拆箱是可以的,但是我尝试了一下,仍然不行:
object id_object = field.GetValue(type);
int id_int = (int)id_object;
short id = (short)id_object;
这个异常是这样的: http://puu.sh/5d2jR.png(抱歉是法语,它说明这是一种类型或强制转换错误)。
有没有人有解决方案?
谢谢, Veriditas。
object id_object = field.GetValue(type); uint id_uint = (uint)id_object; short id = (short)id_uint;
第二次转换涉及到id_uint而不是id_object...非常感谢你,Alberto :) - Veriditasshort id = (short)id_uint;
你也可以缩短为short id = (short)(uint)id_object;
- Rory McCrossan