我有一个 object o 那是众所周知的盒装 int 或 uint :
object o
int
uint
object o = int.MinValue object o = (uint)int.MinValue // same bytes as above
我不知道盒子里是什么,我关心的是里面有4个字节,我想强制到一个 内景 或 . 这在一个环境中工作得很好 unchecked 当我有值(而不是框)时的上下文:
内景
unchecked
unchecked { int a = (int)0x80000000u; // will be int.MinValue, the literal is a uint uint b = (uint)int.MinValue; }
注意:默认情况下,C#中的所有内容都是未选中的,未选中的上下文只在这里是必需的,因为我们处理的是文本,编译器想知道我们是否真的想自取灭亡。
InvalidCastException . 我知道这是合理的运行时行为,但在这种情况下,我知道我在做什么,并希望一个“unchecked unbox”。这样的事存在吗?
InvalidCastException
我知道我可以 catch
catch
你可以用 Convert.ToInt32 如果可能的话,将任何对象转换为int,尽管它也会进行转换或解析,所以它可能比您想要的慢。
如果你知道它是int或uint,你可以这样做:
int x = (o is int) ? (int)o : (int)(uint)o;