3

我面临一个问题。从对象到短的转换不起作用。

在课堂上我有那个(只是一个例子):

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(type) 给了我好的对象(对象值 = 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(对不起法语。它说这是一个类型或转换错误)。

有没有人有解决方案?

谢谢你,维里迪塔斯。

4

2 回答 2

5

您需要将其拆箱为uint(的原始类型message_ID):

object id_object = field.GetValue(type);
uint id_uint = (uint)id_object;
short id = (short)id_uint;

在这里您可以找到有关此主题的非常好的阅读:表示和身份

于 2013-11-09T11:01:33.670 回答
0

上面的解决方案对我不起作用,我解决了这个问题:

short value1 = Convert.ToInt16(data1["Variable"].ToString());
于 2021-02-18T10:52:32.463 回答