我有两个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");
}
答案 0 :(得分:7)
Equal
的{{1}}方法不会从仅仅比较对象引用(不相等)的默认Array
实现中重写。
您希望比较序列中每个元素的值,并确保它们具有相同顺序的相同内容。为此,请在object
中使用SequenceEqual
。
System.Linq.Enumerable
在内部,该方法将遍历每个序列的每个元素,并在每个元素对上调用if(m.SequenceEqual(m2)) {...}
以验证它们是否完全相同。虽然这比使用for循环肯定更容易(并且可以说更具可读性),但请记住,它的表现并不比使用Equals
循环更好,它只是隐藏了循环你。