En C #, ¿por qué el método Equals () en las matrices solo compara sus referencias, no su contenido real?
EnC#
, por quéEquals()
método siempre comprobar la igualdad entre dosarrays
¿Comparando las referencias y no comparando el contenido?
Como consecuencia, todos los métodos de llamadaEquals()
en su implementación (mucho) no funciona como se esperaba con los arreglos (no compara el contenido):
Ejemplo:
int[] array1 = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] array2 = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
var u = array1.Equals(array1); //true
var v = array1.Equals(array2); //false
var w = Array.Equals(array1, array2); //false
var x = (new List<int[]>(new int[][] { array1 })).Contains(array2); //false
var y = (new int[][] { array1 }).Any(x => x == array2); //false
var z = (new int[][] { array1, array2 }).Distinct().Count() == 1; //false
Una posible forma genérica de manejar matrices (sin importar el tipo) podría ser:
EnObject.Equals()
: si ambos tipos de comparación son matrices (de la misma longitud), enumere los elementos (siempre que sea posible), para cada elemento, llameEquals()
. Si una de estas llamadas vuelvefalse
, la matriz es diferente (retornofalse
) de lo contrario devolvertrue
.
Nota: sé sobreSequenceEqual()
, memcmp()
y otras formas de comparar dos matrices. Mi pregunta no es sobre cómo comparar arrays. Solo quiero saber por que c#
los diseñadores no eligen implementar una comparación de matriz completa enEquals()
método.