在不知道盒子里面有什么的情况下拆箱uint / int
我有一个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
并重试,所以这不算作答案。
如果可能的话,可以使用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