У меня есть object 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
. Я знаю, что это разумное поведение во время выполнения, но в этом случае я знаю, что я делаю, и хочу "unchecked unbox". Существует ли что-то подобное?
Я знаю, что мог бы catch
и повторить попытку, так что это не считается ответом.