В описании оператора на MSDNесть замечание:
Исключение выдается только в том случае, если значение value требует больше битов чем поддерживает текущая платформа.
в то время какописание ToInt32
не соответствует, поэтому я полагаю, что заголовок не совсем корректен (для краткости),
более правильным вопросом будет: «Почему IntPtr .ToInt32
выдает OverflowException
в 64-битном режиме для значений, которые подходят для Int32, а Explicit(IntPtr to 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
генерировать исключение, это небезопасное ключевое слово?