私は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ので、それは答えとしてカウントされません。