[あすかぜ・ねっと]あすかぜ・ねっとその他CIL Opcode > unbox

unbox - convert boxed value type to its raw form

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 が発生します。

Menu

Copyright (C) 2004-2009 asukaze, Some Rights Reserved.
Last Update: 2009/06/07
mail (at) asukaze.net