CIL フォーマット
79 (T)
/ unbox (valuetype)
スタック
..., obj → ..., valueTypePtr
詳細
値型のボックス化された表現である obj を、 アンボックス化された形式である valueTypePtr(マネージドポインタ)に変換します。 valuetype はメタデータトークンで、typeref もしくは typedef もしくは typespec です。 obj に含まれる値の型は valuetype に代入可能な型でなければなりません。
box とは異なり、unbox は値のコピーを必要としません。 通常、unbox はボックス化されたオブジェクト内にすでに存在している値のアドレスを返します。 ただし、Nullable<T> は、ボクシング時に値としてボックス化された T を持つため、 このアプローチでは、null 許容型の値をアンボクシングすることができません。 多くの実装では、新しい Nullable<T> をヒープに作成し、 新規に割り当てられたアドレスを取得しなければなりません。
Exception
obj がボックス化された値でない場合、 valuetype が Nullable<T> でかつ obj がボックス化された T でない場合、 もしくは obj に含まれる値の型が typeTok と代入互換性がない場合には、 InvalidCastException が発生します。
obj が null であり、typeTok が null 許容型でない場合、 NullReferenceException が発生します。
クラスが見つからなかった場合、 TypeLoadException が発生します。