SequenceEqual()与自定义类和浮点值不相等 [英] SequenceEqual() is not equal with custom class and float values

查看:129
本文介绍了SequenceEqual()与自定义类和浮点值不相等的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个方法返回一个 List< GradingResult>

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





该列表的浮点数值为6到1:

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

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

  new List< GradingResult> {

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


);

现在我通过以下方式比较计算的gradingResult和测试gradingResult:

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

测试不是绿色的,尽管两个结果列表应该相同, p>

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的全部成绩是测试失败的原因。



有人可以请说明这种情况吗?

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

解决方案

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


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!

解决方案

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.

这篇关于SequenceEqual()与自定义类和浮点值不相等的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆