取消装箱是从 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.