Почему IntPtr.ToInt32 выдает OverflowException в 64-битном режиме, а Explicit(IntPtr to Int32) — нет

В описании оператора на MSDNесть замечание:

Исключение выдается только в том случае, если значение value требует больше битов чем поддерживает текущая платформа.

в то время какописание ToInt32не соответствует, поэтому я полагаю, что заголовок не совсем корректен (для краткости),

более правильным вопросом будет: «Почему IntPtr .ToInt32выдает OverflowExceptionв 64-битном режиме для значений, которые подходят для Int32, а Explicit(IntPtr to Int32) — нет»

В декомпилированном IntPtrToInt32и оператор выглядят очень похоже:

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генерировать исключение, это небезопасное ключевое слово?

5
задан axk 25 June 2012 в 15:38
поделиться