取消装箱是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。取消装箱操作包括:
-
检查对象实例,确保它是给定值类型的一个装箱值。
-
将该值从实例复制到值类型变量中。
以下语句同时说明了装箱和取消装箱操作:
C# | ![]() |
---|---|
int i = 123; // a value type object o = i; // boxing int j = (int) o; // unboxing |
下图显示了以上语句的结果。

要在运行时成功取消装箱值类型,被取消装箱的项必须是对一个对象的引用,该对象是先前通过装箱该值类型的实例创建的。尝试对 null 或对不兼容值类型的引用进行取消装箱操作,将导致
示例
下面的示例演示无效的取消装箱及引发的 InvalidCastException。使用 try 和 catch,在发生错误时显示错误信息。
C# | ![]() |
---|---|
class TestUnboxing { static void Main() { int i = 123; object o = i; // implicit boxing try { int j = (short) o; // attempt to unbox System.Console.WriteLine("Unboxing OK."); } catch (System.InvalidCastException e) { System.Console.WriteLine("{0} Error: Incorrect unboxing.", e.Message); } } } |
输出
Specified cast is not valid. Error: Incorrect unboxing.
如果将下列语句:
int j = (short) o; |
更改为:
int j = (int) o; |
将执行转换,并将得到以下输出:
Unboxing OK.