我有一個應用程序項目,管理和非託管代碼都運行,我需要使用相同的算法來散列兩個系統中的double值。所以要麼我會重寫System.Double.GetHashCode()或在C++代碼中使用它的算法。我無法找到double.gethashcode算法,並決定覆蓋該函數。但我有一個奇怪的錯誤。Double.GetHashCode算法或覆蓋
無法隱式轉換類型雙 以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行,我得到不能式雙隱式轉換爲System.Double 錯誤。如果我運行第1行,則不會發生錯誤,但重寫代碼從不起作用。
也許這是非常糟糕的事情,我正在嘗試。所以任何人都知道double.gethashcode算法,所以我可以編寫等效的C++代碼來獲得確切的int值?
你究竟打算如何覆蓋它?..... -1對不起 – leppie 2010-10-24 16:59:33
@leppie,你錯過了OP問題的一部分,他問道:「也許這是我嘗試的非常糟糕的事情,所以任何一個知道double.gethashcode算法,所以我可以編寫等價的C++代碼來獲得確切的int值?「 – 2010-10-24 17:00:19
採取+1 :) – leppie 2010-10-24 17:02:15