2015-04-01 6 views
1

я тестировал следующий код в нескольких средахИмеет ли спецификация C# кастинг от ulong до int? MonoTouch дает NumberOverflow

ulong c = 10000000000000000; // Base 10 
int w = (int) c;    // w should be 1874919424 

Результаты таковы:

VS2013 .NET 4.5   - w = 1874919424 
Xamarin (mono) Android - w = 1874919424 
Xamarin (mono) iOS  - number overflow 
  • Является ли это вопрос, который должен Xamarin/исправит? (например, требуется спецификация C#)

  • Поддерживает ли IOS/Objective C код этой кастинга? (почему это не работает?)

  • Как я могу обойти это без бокса или снижения производительности?

Этот метод широко используется в шифровании BouncyCastle, и я уверен, портирование это C# и вы хотите сделать, как несколько изменений по мере необходимости.

+0

Вы используете 64 бит? – casillas

+0

У вас есть новый тип данных в Xamarin: http://developer.xamarin.com/guides/cross-platform/macios/nativetypes/ – casillas

+0

@casillas Я использую унифицированную библиотеку. Не уверен, что есть параметры проекта, которые мне нужно проверить (проект/рабочее пространство/симулятор). Я новичок в этом. Также имеет значение x64? Я думал, что .NET скроет это от меня. – LamonteCristo

ответ

1

Если скомпилировано тождественно, то поведение должно быть одинаковым на всех платформах, и это не должно быть связано с поддержкой унифицированных/классических 32/64 бит или nint.

Так что убедитесь, что ваш проект iOS не построен с помощью Сгенерировать проверки переполнения.

Ищите это в вариантах проекта, сборки, компилятора в Xamarin Studio или в параметрах командной строки, предоставленных компилятору: /checked.

+0

Холли курит! Это сработало, я буквально провел 18 часов, отслеживая это ... СПАСИБО – LamonteCristo