在不知道盒子里面有什么的情况下拆箱uint / int

我有一个object o被称为是一个盒装intuint

object o = int.MinValue
object o = (uint)int.MinValue // same bytes as above

我不知道盒子里有什么,我只关心那里有4个字节,我想强制为intuint 。 当我有值(而不是框)时,这可以在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并重试,所以这不算作答案。


如果可能的话,可以使用Convert.ToInt32将任何对象转换为int,但它也会执行转换或解析,因此它可能比您想要的要慢。

如果你知道它是一个int或uint,你可以这样做:

int x = (o is int) ? (int)o : (int)(uint)o;
链接地址: http://www.djcxy.com/p/47577.html

上一篇: Unboxing uint/int without knowing what's inside the box

下一篇: Freeing static memory? no, that can't be right