gpt4 book ai didi

64-bit - 为什么 IntPtr.ToInt32 在 64 位模式下抛出 OverflowException 而 Explicit(IntPtr to Int32) 不会

转载 作者:行者123 更新时间:2023-12-02 09:53:47 25 4
gpt4 key购买 nike

运营商的description on MSDN有一句话:

An exception is only thrown if the value of value requires more bits than the current platform supports.

同时ToInt32's description不是,所以我认为标题不完全正确(为了简洁),

更正确的问题是:“为什么 IntPtr.ToInt32 在 64 位模式下对于适合 Int32 和 Explicit 的值抛出 OverflowException (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抛出异常,是不安全的关键字吗?

最佳答案

你的反汇编程序在这里无法正常工作,mscorlib.dll 很特殊。它不是 AnyCPU 程序集,微软根据处理器架构构建并发布了它的不同版本。我建议您使用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。

关于64-bit - 为什么 IntPtr.ToInt32 在 64 位模式下抛出 OverflowException 而 Explicit(IntPtr to Int32) 不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11192523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com