Я согласен с @Mark Byers и @tafa, что использование double в качестве ключа напрямую является плохой идеей. Если вы хотите убедиться, что у вас точно такой же номер, вы можете создать строковый ключ, основанный на байтах, которые составляют двойное число. Следующая структура отображает двойное число в том же пространстве памяти, что и 8 байт, так что никакого специального преобразования не требуется.
[StructLayout(LayoutKind.Explicit)]
public struct TestStruct
{
[FieldOffset(0)]
public byte byte1;
[FieldOffset(1)]
public byte byte2;
[FieldOffset(2)]
public byte byte3;
[FieldOffset(3)]
public byte byte4;
[FieldOffset(4)]
public byte byte5;
[FieldOffset(5)]
public byte byte6;
[FieldOffset(6)]
public byte byte7;
[FieldOffset(7)]
public byte byte8;
[FieldOffset(0)]
public double double1;
}
Затем он может быть обернут в такую функцию (при условии, что у вас есть структура, определенная в вашем классе как частная переменная)
static string GetStringKey(double key)
{
_conversionStruct.double1 = Double.MaxValue;
return String.Format("{0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}",
_conversionStruct.byte1,
_conversionStruct.byte2,
_conversionStruct.byte3,
_conversionStruct.byte4,
_conversionStruct.byte5,
_conversionStruct.byte6,
_conversionStruct.byte7,
_conversionStruct.byte8);
}
И используется вот так.
var s1 = GetStringKey(double.MaxValue);
var s2 = GetStringKey(double.MinValue);
, что дает ...
s1="255:255:255:255:255:255:239:127"
s2="255:255:255:255:255:255:239:255"