运营商description on MSDN有一条评论:
如果value的值需要更多位,则仅抛出异常 比目前的平台支持。
虽然ToInt32
's description没有,所以我认为标题不完全正确(为了简洁起见),
更正确的问题是:“为什么IntPtr.ToInt32
以64位模式抛出OverflowException
适合Int32 和Explicit(IntPtr到Int32)的值不“
在反编译的IntPtr
ToInt32
中,运算符看起来非常相似:
public static explicit operator int(IntPtr value)
{
return (int) value.m_value;
}
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public unsafe int ToInt32()
{
return (int) this.m_value;
}
我想知道是什么让ToInt32
抛出异常,是不安全的关键字?
答案 0 :(得分:10)
您的反汇编程序无法在此处正常工作,mscorlib.dll很特别。它不是AnyCPU程序集,Microsoft根据处理器体系结构构建并提供不同版本的程序集。我建议您使用Reference Source,您将获得原始源代码。看起来像这样:
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public unsafe int ToInt32() {
#if WIN32
return (int)m_value;
#else
long l = (long)m_value;
return checked((int)l);
#endif
}
checked 关键字提供了OverflowException。