取消装箱是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。取消装箱操作包括:

以下语句同时说明了装箱和取消装箱操作:

C# CopyCode image复制代码
int i = 123;      // a value type
object o = i;     // boxing
int j = (int) o;  // unboxing

下图显示了以上语句的结果。

取消装箱转换

图片:取消装箱转换

要在运行时成功取消装箱值类型,被取消装箱的项必须是对一个对象的引用,该对象是先前通过装箱该值类型的实例创建的。尝试对 null 或对不兼容值类型的引用进行取消装箱操作,将导致 InvalidCastException

示例

下面的示例演示无效的取消装箱及引发的 InvalidCastException。使用 trycatch,在发生错误时显示错误信息。

C# CopyCode image复制代码
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.

请参见