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 box = i; // Boxing int j = (int)box; // Unboxing
The following figure demonstrates the result of the preceding statements.
Unboxing Conversion

For an unboxing conversion to a given value type to succeed at run time, the value of the source argument must be a reference to an object that was previously created by boxing a value of that value type. If the source argument is null or a reference to an incompatible object, an InvalidCastException is thrown.
Example
The following example demonstrates a case of invalid unboxing, of how incorrect unboxing leads to InvalidCastException. By using try and catch, an error message is displayed when the error occurs.
using System;
public class UnboxingTest
{
public static void Main()
{
int intI = 123;
// Boxing
object o = intI;
// Reference to incompatible object produces InvalidCastException
try
{
int intJ = (short) o;
Console.WriteLine("Unboxing OK.");
}
catch (InvalidCastException e)
{
Console.WriteLine("{0} Error: Incorrect unboxing.",e);
}
}
}
Output
System.InvalidCastException at UnboxingTest.Main() Error: Incorrect unboxing.
If you change the statement:
int intJ = (short) o;
to:
int intJ = (int) o;
the conversion will be performed, and you will get the output Unboxing OK.
本文详细介绍了C#中的装箱与拆箱概念,包括它们的定义、工作原理及如何在代码中实现。通过具体示例展示了正确的使用方式与不当操作可能导致的问题,并提供了异常处理策略。
938

被折叠的 条评论
为什么被折叠?



