1

我有两个float[]对象。在不编写 for 循环的情况下,我想比较我的两个一维数组,看看它们在数值上是否相等。

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

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

 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");
   }
4

1 回答 1

8

Equalfor的方法不会从仅比较对象的引用(不相等)Array的默认实现中被覆盖。object

您想比较序列中每个元素的值,并确保它具有相同的内容以相同的顺序。为此,请使用SequenceEqualin System.Linq.Enumerable

if(m.SequenceEqual(m2)) {...}

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

于 2012-11-14T22:13:29.537 回答