マネージ コードとアンマネージ コードの両方を実行するアプリケーション プロジェクトがあり、両方のシステムで double 値をハッシュするために同じアルゴリズムを使用する必要があります。そのため、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 のコメントを外すと、Cannot implicitly convert type double to System.Double エラーが発生します。1行目を実行してもエラーは発生しませんが、オーバーライドされたコードは機能しません。
多分それは私がしようとしている非常に悪いことです。誰でも double.gethashcode アルゴリズムについて知っているので、同等の C++ コードを記述して正確な int 値を取得できますか?