ios - C# 规范是否允许从 ulong 转换为 int? Monotouch 给出一个 NumberOverflow

标签 ios c#-4.0 casting xamarin.ios boxing

我在几个环境中测试了以下代码

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# 并希望根据需要进行尽可能少的更改。

最佳答案

如果以相同方式编译,则所有平台上的行为应该相同,并且不应与统一/经典 32/64 位或 nint 支持相关。

因此,请确保您的 iOS 项目未在启用生成溢出检查 的情况下构建。

在 Xamarin Studio 的“项目选项”、“生成”、“编译器”中或在提供给编译器的命令行选项中查找此选项:/checked

关于ios - C# 规范是否允许从 ulong 转换为 int? Monotouch 给出一个 NumberOverflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29400830/

相关文章:

ios - Xcode 8 如何在 Objective-C 中使用核心数据代码生成类?

ios - 来自 UI 控件的奇怪 Bool 类型

wpf - 如何正确实现文本框验证

asp.net-mvc - 使用 smtp 发送电子邮件仅在通过 Outlook 发送后才有效

Android:无法从 View 转换到 MapView

c++ - 在 C++ 中应该使用什么来检查身份?

ios - (Rubymotion) 如何在 Formotion 中执行此自定义 View ?

ios - 实现有问题的 KeyValue Observation

c# - 使用表单例份验证的 ASP.NET MVC 应用程序

c++ - 将 int32 转换为 uint32 是无操作吗?