[Mono-list] Dictionary<> key'ed by Decimal works differently between Mono and .NET
Gareth Pearce
tilps.kilm at gmail.com
Thu Aug 4 06:14:41 EDT 2011
On 4/08/2011 8:04 PM, Robert Jordan wrote:
> On 04.08.2011 11:09, Mike Christensen wrote:
>> I'm trying to get my unit tests to pass so I can try out my code on
>> Mono, however I ran into some different behavior using the
>> Dictionary<> class. I've written a stand-alone test case to
>> illustrate the problem.
>>
>> http://pastie.org/2318806
>>
>> The code will print out "True" on .NET and "False" on Mono. I believe
>> this is because I add the key as 0.5m to the dictionary, but I try to
>> look it up with 0.500m. .NET will see these values as equal, Mono
>> will not.
>>
>> Technically the numbers are equal, though they have different levels
>> of precision. However, I'm of the opinion that Mono should emulate
>> .NET where-ever possible.
> Well, MS.NET is inconsistent. It returns "false" in all cases
> below, which means that it performs some insane magic inside
> Dictionary, something that cannot be reproduced even using
> its own comparer.
>
> If you want this fixed, then you should provide some sort
> of evidence (a document/blog/etc. that describes MS.NET's
> behavior).
>
> using System;
> using System.Collections.Generic;
>
> class Test
> {
> static void Main ()
> {
> decimal a = 10.5m;
> decimal b = Math.Round (10.5m - 10, 3);
> Console.WriteLine (a == b);
>
> var map = new Dictionary<decimal, string>();
> var c = map.Comparer;
> Console.WriteLine (c.Equals (a, b));
> Console.WriteLine (c.GetHashCode (a) == c.GetHashCode (b));
> }
> }
>
> Robert
>
> _______________________________________________
> Mono-list maillist - Mono-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list
>
Looks like you have a typo - that should be 0.5m assigned to a?
More information about the Mono-list
mailing list