我正在覆盖获取哈希码。有一点
Hash = 1210600964 * 31 + -837896230
这会导致 OverflowException
。有没有我可以使用的方法,比如:
Hash = addUnsafe(multiplyUnsafe(1210600964, 31), -837896230)
无需将我的项目链接到另一个程序集?我不想删除溢出检查。 dllimports
正常。
最佳答案
您可以改为使用 64 位数字进行数学计算,然后使用 And
去除多余部分:
Option Infer On
' .....
Shared Function MultiplyWithTruncate(a As Integer, b As Integer) As Integer
Dim x = CLng(a) * CLng(b)
Return CInt(x And &HFFFFFFFF)
End Function
尽管您可以在一个解决方案中混合使用 C# 和 VB.NET 项目,但用 C# 编写一个类来执行未经检查的算法可能是最简单的,即使您不热衷于添加对另一个程序集的引用。
用 C# 编写函数甚至可能是个好主意,这样您就可以测试 VB 函数是否返回预期值。这是我检查上面代码所做的。
编辑:Joseph Nields 的评论提示我测试性能,结果使用 CLng 而不是 Convert.ToInt64 并且运行速度更快。
关于.net - 在 VB.NET 中是否有用于执行不安全算术的实用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31436730/