在 VB.NET 中是否有用于执行不安全算术的实用方法?

Are there utility methods for performing unsafe arithmetic in VB.NET?

我正在覆盖获取哈希码。有一点

Hash = 1210600964 * 31 + -837896230

导致 OverflowException。有没有我可以使用的方法,比如:

Hash = addUnsafe(multiplyUnsafe(1210600964, 31), -837896230)

无需 link 我的项目到另一个程序集?我不想删除溢出检查。 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# 中编写 class 来执行未经检查的算法可能是最简单的,即使您不热衷于添加对另一个程序集的引用。

用 C# 编写函数甚至可能是个好主意,这样您就可以测试 VB 函数是否 return 预期值。这是我检查上面代码所做的。

编辑:Joseph Nields 的评论提示我测试性能,结果使用 CLng 而不是 Convert.ToInt64 并且运行速度更快。