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.
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.
Example
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 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); } } }
Output
Specified cast is not valid. Error: Incorrect unboxing.
If you change the statement:
int j = (short) o; | |
to:
int j = (int) o; | |
the conversion will be performed, and you will get the output:
Unboxing OK.