私はobject o
箱入りであることが知られているint
またはuint
:
object o = int.MinValue
object o = (uint)int.MinValue // same bytes as above
ボックスに何が入っているのかわかりません。気になるのは、int
またはに強制したい4バイトがあることだけですuint
。これは、unchecked
(ボックスではなく)値があるコンテキストで正常に機能します。
unchecked
{
int a = (int)0x80000000u; // will be int.MinValue, the literal is a uint
uint b = (uint)int.MinValue;
}
注:デフォルトでは、C#のすべてがチェックされていません。リテラルを処理していて、コンパイラーが本当に自分自身を足で撃ちたいかどうかを知りたいので、チェックされていないコンテキストはここでのみ必要です。
問題は、ボックス内の内容がわからないことです(4バイト以外)が、間違ったタイプにボックスを解除しようとすると、ランタイムがそうしますInvalidCastException
。私はこれが妥当な実行時の動作であることを知っていますが、この場合、私は自分が何をしているのかを知っており、「チェックされていないボックスから外す」必要があります。そのようなものは存在しますか?
再試行できることはわかっているcatch
ので、それは答えとしてカウントされません。