I'm having a hard time understanding this. Consider the following example:
protected void Page_Load(object sender, EventArgs e)
{
// No surprise that this works
Int16 firstTest = Convert.ToInt16(0);
int firstTest2 = (int)firstTest;
// This also works
object secondTest = 0;
int secondTest2 = (int)secondTest;
// But this fails!
object thirdTest = Convert.ToInt16(0);
int thirdtest2 = (int)thirdTest; // It blows up on this line.
}
The specific error that I get at runtime is Specified cast is not valid.
If I QuickWatch (int)thirdTest
in Visual Studio, I get a value of Cannot unbox 'thirdTest' as a 'int'
.
What the heck is going on here?
Unboxing checks the exact type as explained in the documentation.
As you can see the first step is to check that the object instance matches the target type.
Also quote from the documentation:
So to fix this error make sure that the type matches before attempting to unbox: