Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用object.Equals比较两个float[]数组元素是否相等_C#_.net_C# 4.0 - Fatal编程技术网

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:危险的一面是什么?你能给我一个“比较浮动”的结果示例吗-