SequenceEqual() is not equal with custom class and float values

偶尔善良 提交于 2019-12-13 07:53:20

问题


I have a method returning a List<GradingResult>:

   public class GradingResult
    {
        public float Grade { get; set; }
        public int Score { get; set; }
    }

That list has values from 6 to 1 in float format:

6, 5.9, 5.8, ... 1.2, 1.1,1

Now in my unit test I have a test GradingResult list with test data:

      new List<GradingResult> {

                 new GradingResult{ Score = 0,Grade = 6.0f},
                 new GradingResult{ Score = 1,Grade = 5.8f},
                 new GradingResult{ Score = 2,Grade = 5.7f},
                 new GradingResult{ Score = 3,Grade = 5.5f},
                 new GradingResult{ Score = 4,Grade = 5.4f},
                 new GradingResult{ Score = 5,Grade = 5.2f},
                 new GradingResult{ Score = 6,Grade = 5.1f},
                 new GradingResult{ Score = 7,Grade = 4.9f},
                 new GradingResult{ Score = 8,Grade = 4.7f},
                 new GradingResult{ Score = 9,Grade = 4.6f },
                 new GradingResult{ Score = 10, Grade = 4.4f },
                 new GradingResult{ Score = 11, Grade = 4.3f},
                 new GradingResult{ Score = 12, Grade = 4.1f},
                 new GradingResult{ Score = 13, Grade = 4.0f},
                 new GradingResult{ Score = 14, Grade = 3.8f},
                 new GradingResult{ Score = 15, Grade = 3.7f},
                 new GradingResult{ Score = 16, Grade = 3.5f},
                 new GradingResult{ Score = 17, Grade = 3.3f},
                 new GradingResult{ Score = 18, Grade = 3.2f},
                 new GradingResult{ Score = 19, Grade = 3.0f},
                 new GradingResult{ Score = 20, Grade = 2.9f},
                 new GradingResult{ Score = 21, Grade = 2.7f},
                 new GradingResult{ Score = 22, Grade = 2.6f},
                 new GradingResult{ Score = 23, Grade = 2.4f},
                 new GradingResult{ Score = 24, Grade = 2.2f},
                 new GradingResult{ Score = 25, Grade = 2.1f},
                 new GradingResult{ Score = 26, Grade = 1.9f},
                 new GradingResult{ Score = 27, Grade = 1.8f},
                 new GradingResult{ Score = 28, Grade = 1.6f},
                 new GradingResult{ Score = 29, Grade = 1.5f},
                 new GradingResult{ Score = 30, Grade = 1.3f},
                 new GradingResult{ Score = 31, Grade = 1.2f},
                 new GradingResult {Score = 32, Grade = 1.0f },
        }, "nextparameter"


            );

Now I compare the computed gradingResult with the test gradingResult via:

Assert.IsTrue(gradingResults.SequenceEqual(testGradingResults));

Test is not green, although the both result lists should be equal due to the definition here:

https://msdn.microsoft.com/en-us/library/bb348567(v=vs.100).aspx

My guess is that the whole grades like gradingResults 6,5,4,3,2,1 and the test gradingResults 6.0 , 5.0, 4.0, 3.0, 2.0, 1.0 are the cause of the failed test.

Can someone please shed some light on this situation please?

Why does the test fail? My sample is pretty similar to the Pets sample!


回答1:


You need to override the Equals and GetHashCode methods. Otherwise, it uses reference equality, and since the object in the lists are not the same instances, Equals returns false.



来源:https://stackoverflow.com/questions/37799361/sequenceequal-is-not-equal-with-custom-class-and-float-values

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!