我有一个托管和非托管代码都运行的应用程序项目,我需要使用相同的算法来散列两个系统中的双精度值。所以要么我将覆盖 System.Double.GetHashCode() 要么在 C++ 代码中使用它的算法。我找不到 double.gethashcode 算法并决定重写该函数。但我遇到了一个奇怪的错误。
无法将 double 类型隐式转换为 System.Double
这是代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace System
{
public struct Double
{
unsafe public override int GetHashCode()
{
fixed (Double* dd = &this)
{
int* xx = (int*)dd;
return xx[0] ^ xx[1] ;
}
}
}
}
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double dd = 123.3444; // line 1
// Double dd = 123.3444; // line 2
// Cannot implicitly convert type double to System.Double
Console.WriteLine(dd.GetHashCode());
Console.ReadLine();
}
}
}
如果我取消注释第 2 行,我会得到无法将 type double 隐式转换为 System.Double 错误。如果我运行第 1 行,则不会发生错误,但覆盖的代码永远不会起作用。
也许这是我正在尝试的非常糟糕的事情。所以任何人都知道 double.getashcode 算法,所以我可以编写等效的 c++ 代码来获得确切的 int 值?