将已装箱的浮点数拆箱为整型

本文关键字:整型 浮点数 | 更新日期: 2023-09-27 18:09:40

我正在准备考试,被一个关于装箱/拆箱的问题绊倒了。我一直在想如果我的盒子我们说一个像这样的浮点数:

float x = 4.5f;
object o = x;

如果我想从o返回一个值类型变量,我必须将其解盒为浮点数。

float y = (float)o;

这会抛出一个异常:

int z = int(o);

如果我想将存储在o中的值转换为int类型,我必须先将其拆箱,然后像这样进行转换:

int z = (int)(float)o;

现在是我偶然发现的问题:

假设你有这样一个方法:

public static void FloorTemperature(float degrees) {
    object degreesRef = degrees;
    `xxx`
    Console.WriteLine(result);
}

您需要确保应用程序不会对无效转换抛出异常。您应该为xxx插入哪个代码段(我认为无效转换是无效强制转换异常):

int result = (int)degreesRef;(b) int result = (int)(float)degreesRef;

正确的解决方案是(a),但对我来说(b)看起来是正确的。所以你能开导我一下吗?我错过了什么?

亲切的问候

将已装箱的浮点数拆箱为整型

你不会错过任何东西

答案应该是(b),因为:

(a)抛出异常,因为你试图将object转换为int

(b)是正确的,因为您首先将其转换为float,然后将其转换为int,这将其舍入,但不会抛出异常。