7

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

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

我不知道盒子里有什么,我只关心里面有 4 个字节我想强制转换为intor uintunchecked当我有值(而不是框)时,这在上下文中可以正常工作:

unchecked
{
    int a = (int)0x80000000u; // will be int.MinValue, the literal is a uint
    uint b = (uint)int.MinValue;
}

注意:默认情况下,C# 中的所有内容都是未检查的,未检查的上下文仅在此处是必需的,因为我们正在处理文字,编译器想知道我们是否真的想在脚下开枪。

现在的问题是我不知道盒子里面有什么(除了它是 4 个字节),但是当我尝试解开错误的类型时,运行时会这样做,我得到一个InvalidCastException. 我知道这是合理的运行时行为,但在这种情况下,我知道我在做什么并且想要一个“未选中的取消框”。存在这样的东西吗?

我知道我可以catch重试,所以这不算作答案。

4

1 回答 1

4

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

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

int x = (o is int) ? (int)o : (int)(uint)o;
于 2010-08-30T11:50:32.923 回答