У меня есть объект o
, который известно, что это упакованный int
или uint
:
object o = int.MinValue
object o = (uint)int.MinValue // same bytes as above
Я не знаю, что находится в коробке, все, что меня волнует, это то, что там 4 байта, которые я хочу принудить в int
или uint
. Это отлично работает в контексте unchecked
, когда у меня есть значения (вместо полей):
unchecked
{
int a = (int)0x80000000u; // will be int.MinValue, the literal is a uint
uint b = (uint)int.MinValue;
}
Примечание: по умолчанию все в C # не отмечено флажком, непроверенный контекст необходим только здесь, потому что мы имеем дело с литералами и компилятор хочет знать, действительно ли мы хотим выстрелить себе в ногу.
Проблема в том, что я не знаю, что внутри коробки (кроме 4 байтов), но среда выполнения делает это, когда я пытаюсь распаковать неправильный тип, я получаю InvalidCastException
. Я знаю, что это разумное поведение во время выполнения, но в этом случае я знаю, что делаю, и хочу, чтобы "снятая отметка" распаковывалась. Что-то подобное существует?
Я знаю, что могу поймать
и повторить попытку, поэтому это не считается ответом.