我在几个环境中测试了以下代码
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/