У меня есть проект приложения, который выполняется как управляемым, так и неуправляемым кодом, и мне нужно использовать тот же алгоритм для хэширования двойных значений в обеих системах. поэтому либо я переопределю 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
@leppie, вы пропустили часть вопроса OP, где он спрашивает: «Может быть, это очень плохо, что я пытаюсь, поэтому любой знает о алгоритме double.gethashcode, поэтому я могу написать эквивалентный код C++ для получения точной стоимости int? " –
пункт принят +1 :) – leppie