SequenceEqual() 不等于自定义 class 和浮点值

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

我有一个返回 List<GradingResult>:

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

该列表具有浮点格式的从 6 到 1 的值:

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

现在在我的单元测试中,我有一个带有测试数据的测试 GradingResult 列表:

      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"


            );

现在我通过以下方式将计算的 gradingResult 与测试 gradingResult 进行比较:

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

测试不是绿色的,尽管根据此处的定义,两个结果列表应该相等:

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

我的猜测是 gradingResults 6,5,4,3,2,1 和测试 gradingResults 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 等整个成绩是测试失败的原因。

有人可以解释一下这种情况吗?

为什么测试失败?我的示例与宠物示例非常相似!

您需要覆盖 EqualsGetHashCode 方法。否则,它使用引用相等性,并且由于列表中的对象不是相同的实例,Equals returns false.