C# 使用object.Equals比较两个float[]数组元素是否相等
我有两个C# 使用object.Equals比较两个float[]数组元素是否相等,c#,.net,c#-4.0,C#,.net,C# 4.0,我有两个float[]对象。在不编写for循环的情况下,我想比较两个一维数组,看看它们在数值上是否相等 当我运行以下代码时(因为所有元素都相等),它不会遍历if语句并显示消息 我应该如何应用Equals命令才能正常工作? 有什么比较命令可以使用吗 Random r1 = new Random(1); int rndNumber= r1.Next(10); float[] m = Enumerable.Repeat((float)rndNumber, 180).ToArray();
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");
}
Array
的Equal
方法不会从默认的object
实现中被覆盖,该实现只是比较对象(不相等)的引用
您希望比较序列中每个元素的值,并确保其具有相同顺序的相同内容。为此,请在System.Linq.Enumerable
中使用SequenceEqual
if(m.SequenceEqual(m2)) {...}
在内部,该方法将遍历每个序列的每个元素,并对每个元素对调用
Equals
,以验证它们是否都相同。虽然这肯定比for循环更容易使用(也可以说更可读),但请记住,它的性能并不比使用for
循环好,它只是对您隐藏循环。默认的对象
实现不会覆盖数组
的相等
方法,该方法只会比较对象(不相等)的引用
您希望比较序列中每个元素的值,并确保其具有相同顺序的相同内容。为此,请在System.Linq.Enumerable
中使用SequenceEqual
if(m.SequenceEqual(m2)) {...}
在内部,该方法将遍历每个序列的每个元素,并对每个元素对调用
Equals
,以验证它们是否都相同。虽然这肯定比for循环更容易使用(并且可以说更可读),但请记住,它的性能并不比使用for
循环好,它只是对您隐藏了循环。旁注:由于浮点计算的性质,将浮点与==/Equals进行比较是危险的。。。确保你真的需要==,而不是别的。@Alexie:危险的一面是什么?你能给我一个“比较浮点数…”的结果示例吗-旁注:由于浮点数计算的性质,将浮点数与==/Equals进行比较是危险的。。。确保你真的需要==,而不是别的。@Alexie:危险的一面是什么?你能给我一个“比较浮动”的结果示例吗-