在 C# 中将具有 Short 值的对象转换为 int

2 c#

考虑这段代码:

private static void Main(string[] args)
{
    short age = 123;
    object ageObject = age;
    //var intAge = (int)ageObject;//Specified cast is not valid.
    int newAge= (short)intAge;
    Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

我必须为 object 分配一个短值,然后再次强制转换为 int ,但是当我尝试这样做时:var intAge = (int)ageObject;我得到:指定的强制转换无效。我不知道为什么?

在谷歌搜索后我发现应该转换为short并分配给int:int newAge= (short)intAge;

为什么我们应该转换为short并分配给int?

为什么编译器有这种行为?

Ste*_*ove 5

该失败是运行时错误。

原因是该age值已被装箱到一个对象中;将其拆箱为不正确的类型 ( int) 是失败的 - 这是一个short.

您注释掉的行上的强制转换是拆箱操作,而不仅仅是强制转换。