This documentation is archived and is not being maintained.

Unboxing Conversion (C# Programming Guide)

Unboxing is an explicit conversion from the type object to a value type or from an interface type to a value type that implements the interface. An unboxing operation consists of:

  • Checking the object instance to make sure it is a boxed value of the given value type.

  • Copying the value from the instance into the value-type variable.

The following statements demonstrate both boxing and unboxing operations:

int i = 123;      // a value type
object o = i;     // boxing
int j = (int)o;  // unboxing

The following figure demonstrates the result of the preceding statements.

Unboxing Conversion
UnBoxing Conversion graphic

For the unboxing of value types to succeed at run time, the item being unboxed must be a reference to an object that was previously created by boxing an instance of that value type. Attempting to unbox null or a reference to an incompatible value type will result in an InvalidCastException.


The following example demonstrates a case of invalid unboxing and the resulting InvalidCastException. Using try and catch, an error message is displayed when the error occurs.

class TestUnboxing
    static void Main()
        int i = 123;
        object o = i;  // implicit boxing

            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.

If you change the statement:

int j = (short) o;


int j = (int) o;

the conversion will be performed, and you will get the output:

Unboxing OK.

See Also