使用object.Equals来比较两个float []数组元素是否相等

时间:2012-11-14 22:10:59

标签: c# .net c#-4.0

我有两个float[]个对象。如果不编写for循环,我想比较我的两个1D数组,看看它们是否在数字上相等。

当我运行以下代码时(因为所有元素都相同),它不会通过if语句并显示消息。

如何应用等于命令才能正常工作? 我可以使用任何比较命令吗?

 Random r1 = new Random(1);
   int rndNumber= r1.Next(10);
   float[] m = Enumerable.Repeat((float)rndNumber, 180).ToArray();
   float[] m2 = Enumerable.Repeat((float)rndNumber, 180).ToArray();
   if (m.Equals(m2))
    {
    MessageBox.Show("we are equal");
   }

1 个答案:

答案 0 :(得分:7)

Equal的{​​{1}}方法不会从仅仅比较对象引用(不相等)的默认Array实现中重写。

您希望比较序列中每个元素的值,并确保它们具有相同顺序的相同内容。为此,请在object中使用SequenceEqual

System.Linq.Enumerable

在内部,该方法将遍历每个序列的每个元素,并在每个元素对上调用if(m.SequenceEqual(m2)) {...} 以验证它们是否完全相同。虽然这比使用for循环肯定更容易(并且可以说更具可读性),但请记住,它的表现并不比使用Equals循环更好,它只是隐藏了循环你。