Array equality

  • Thread starter Thread starter Edward Diener
  • Start date Start date
E

Edward Diener

Is there any System.Array function to test to see if two arrays are equal,
meaning the arrays are the same length and contain elements which are equal
to each other ? The System.Array.Equals method appears to test only for
instance equality, just like object.Equals.
 
Edward Diener said:
Is there any System.Array function to test to see if two arrays are
equal, meaning the arrays are the same length and contain elements
which are equal to each other ? The System.Array.Equals method
appears to test only for instance equality, just like object.Equals.

No, there isn't - but the good news is that it's pretty trivial to
write your own utility method to do it.
 
it is easy write write your own

if(arr1.Length == arr2.Length)
{
for(int i=0; i<arr1.Length; i++)
if(arr1 != arr2)
/* not same*/
}
 
Jon Skeet said:
No, there isn't - but the good news is that it's pretty trivial to
write your own utility method to do it.

Yes, I realize it is pretty trivial to do it. Perhaps I do not understand
the purpose of the overridden System.Object.Equals method but I would have
thought that this should test for object equality rather than instance
equality for derived classes, since one could always test for instance
equality by casting both references to a System.Object.
 
Edward Diener said:
Yes, I realize it is pretty trivial to do it. Perhaps I do not understand
the purpose of the overridden System.Object.Equals method but I would have
thought that this should test for object equality rather than instance
equality for derived classes, since one could always test for instance
equality by casting both references to a System.Object.

Yes, it would make sense for them to have overridden Equals in the
obvious way - I'm not sure why they didn't.

There's nothing to say that classes *have* to override Equals - and
indeed often it's a bad idea to override it for mutable types like
Array. (If you look at GetHashcode, that suggests that the hashcode
shouldn't change which means it can't use any mutable properties of the
object - but two objects which are equal should have the same hashcode.
It's all a bit difficult, partly because I believe the GetHashcode
contract has been badly written.)
 
Back
Top